2014-11-09 3 views
0

Как играть в несжатые wav-файлы в delphi? Я имею в виду чтение байта wav-файла байтом и отправку данных непосредственно в динамик. Я искал интернет и нашел некоторые функции для воспроизведения звука в течение определенного периода времени. например: myplaysoundfunc(1200, 100). это будет воспроизводить звук 1200 Гц в течение 100 миллисекунд. Но играть в wav-файл сложнее. У меня проблема с Samples per second и bits per samples.Прочитать и воспроизвести файл Wav в delphi

+0

TMediaPlayer обрабатывает все самостоятельно. вы просто скажете, чтобы открыть файл и воспроизвести его. Но я хочу открыть wav-файл и прочитать его byte by byte и поместить данные в массив образцов, а затем воспроизвести его через звуковую карту. Но у меня проблема с объемом данных, которые я должен читать в соответствии с SampleRate и BitRate. – Agha

+0

Знаете ли вы формат файла? –

+0

Да. это несжатый файл Wav. который имеет небольшой заголовок. то все остальные байты файла представляют собой звуковые частоты, которые можно воспроизводить непосредственно через динамик. это может быть «11,025 Гц 16 бит PCM» или «11 025 Гц 8 бит PCM» или некоторые другие форматы. – Agha

ответ

1

Для этого вам не нужны никакие компоненты или внешние библиотеки.

Полное применение Исходный код, взятый из http://rosettacode.org/wiki/Play_recorded_sounds#Delphi:

{$APPTYPE CONSOLE} 
program PlayRecordedSounds; 
uses MMSystem; 
begin 
    sndPlaySound('SoundFile.wav', SND_NODEFAULT OR SND_ASYNC); 
end. 

С помощью этих параметров звук играет на фоне в то время как ваше приложение продолжает работать. Если вы используете SND_SYNC вместо SND_ASYNC, ваше приложение ждет завершения звука перед продолжением.

Вы также можете включить звуковую петлю, если вы добавите SND_LOOP. Эта процедура останавливает звуки, которые вы ранее играли, если не добавить SND_NOSTOP. Таким образом, старый звук продолжает играть.

Примечания:

  • Это будет работать только на Windows. Для FireMonkey есть другие варианты.
  • Если вы действительно хотите сыграть образец по образцу, все усложняется. В этом случае я советую использовать библиотеку, чтобы помочь вам в этом, например, Delphi ASIO/VST library.
+0

Я видел ASIO/VST и некоторые другие библиотеки, такие как BASS. но эти библиотеки сами все делают. Я хочу, чтобы иметь возможность читать данные из wav-файла и отправлять его на спикер напрямую без каких-либо сторонних библиотек. Я знаю, как выводить определенную частоту через динамик. Мне нужно знать, сколько данных я должен прочитать из WAV-файла и отправить его динамику в секунду. – Agha

Смежные вопросы