我有一個double數組(大於60k條目),我有頻率值。現在我想用C/C++來創建一個聲音,我可以在揚聲器上播放它。我的操作系統是Linux。如何從雙數組中創建聲音並在揚聲器上播放它
謝謝。我希望我很清楚。
我有一個double數組(大於60k條目),我有頻率值。現在我想用C/C++來創建一個聲音,我可以在揚聲器上播放它。我的操作系統是Linux。如何從雙數組中創建聲音並在揚聲器上播放它
謝謝。我希望我很清楚。
http://www.linuxjournal.com/article/6735
這是在Linux雜誌關於與ALSA(高級Linux聲音架構)編程的文章的鏈接。它包含一些示例代碼。
謝謝你。 – Dilawar 2010-10-14 21:57:08
Qt庫可能是矯枉過正你想要做什麼,有可能是更容易的選擇,但它的選項:)
您應該能夠使用QAudioOutput類做你想做什麼。
另外兩個API是SDL和SFML。
以下信息來自Debian中提供的名爲beep
的命令行程序。源代碼可通過存儲庫獲取,也可從here獲取。
有一個ioctl()
呼叫與控制檯設備的KIOCSOUND請求,您可以用來播放通過PC揚聲器的聲音。該片段是:
ioctl(fd, KIOCSOUND, CLOCK_TICK_RATE/(int)frequency);
播放聲音頻率frequency
,並且:
ioctl(fd, KIOCSOUND, 0);
停止蜂鳴聲。 fd
是一個文件描述符,其寫入權限爲/dev/console
,frequency
是聲音頻率,單位爲赫茲。常數CLOCK_TICK_RATE與用於創建蜂鳴聲的定時器芯片有關,並且在beep
源代碼中的值爲1193180(赫茲)。雖然這對您的系統可能會有所不同,但如果我的想法是正確的,我記得在使用PC揚聲器的舊DOS程序中看到了相同的常量。
我假設'double'值只是振幅,而不是一些壓縮(類似MP3的)表示? – MSalters 2010-10-15 08:40:18
是的,這是對的! – Dilawar 2010-10-16 07:42:16