我可以使用Qt将字节写入音频输出吗?

时间:2016-03-18 22:54:38

标签: c++ qt audio

Qt网站上有关于使用音频API的例子,但坦率地说我根本不理解它们。

我想象的是将值数组(字节,整数......)写入某个音频缓冲区并让声卡“播放”它们(实际上是DAC)。

伪代码:

// Square wave?
const int values[] = {255,255,255,255, 0,0,0,0, 255,255,255,255 ...};
// Create output that will buffer the bytes and put them on digi to analog converter
RawAudioOutput output(BIT_RATE_CONSTANT, ... some other parameters ...);
output.start();
output.writeBytes(values, sizeof(values));

我能完成类似的事情吗?我该怎么办呢?我知道我可以在Audacity中模拟方波(听起来不太好),所以我想这是可能的。怎么样?

1 个答案:

答案 0 :(得分:1)

在Qt中,如果要将值数组写入音频缓冲区,则其类为QAudioOutput。值数组的格式可能会有所不同,所有平台都应支持PCM格式。

Qt附带an example that demonstrates the usage of QAudioOutput,请看一下。在该示例中,sachin@sachin-laptop:~$ gem list lob *** LOCAL GEMS *** globalid (0.3.6, 0.3.5) lob (2.4.0) sachin@sachin-laptop:~$ irb 2.2.2 :001 > require 'lob' => true 2.2.2 :002 > Lob.api_key = "test_00001" => "test_00001" 2.2.2 :003 > @lob = Lob.load => #<Lob::V1::Resource:0x000000034e0a40 @options={:api_host=>"api.lob.com", :protocol=>"https", :api_version=>nil, :api_key=>"test_00001"}> 2.2.2 :004 > @lob.letters => #<Lob::V1::Letter:0x0000000342de40 @resource=#<Lob::V1::Resource:0x000000034e0a40 @options={:api_host=>"api.lob.com", :protocol=>"https", :api_version=>nil, :api_key=>"test_00001"}>> 2.2.2 :005 > 函数创建值的数组,然后将其发送到音频设备。

当然,从一组值中播放音频是非常低级的。使用QMediaPlayer,Qt还提供了一个高级类来播放声音文件(.wav,.mp3),视频文件甚至流。