我有一个振荡:对于每个时刻吨,我有一套样品。发挥振荡/振动会使声音
我需要发挥这种振荡(输出到扬声器)的声音。
跨平台C++(或QT)溶液是优选的,用于Windows溶液也很好。
请帮助我改进问题,如果你知道如何...
我有一个振荡:对于每个时刻吨,我有一套样品。发挥振荡/振动会使声音
我需要发挥这种振荡(输出到扬声器)的声音。
跨平台C++(或QT)溶液是优选的,用于Windows溶液也很好。
请帮助我改进问题,如果你知道如何...
这里是C++/Qt代码:
#include<math.h>
#include<QBuffer>
#include<QAudioFormat>
#include<QAudioOutput>
...
QAudioFormat format;
format.setChannels(1);
format.setFrequency(22050);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
QAudioOutput* output=new QAudioOutput(format);
QBuffer* buffer=new QBuffer();
QByteArray data;
for (int i=0;i<22050*2;i++)
{
short value=(/*Volume:*/10000*sin(2*3.1415*/*Frequency:*/600*i/22050.0));
data.append((char*)&value,2);
}
buffer->setData(data);
buffer->open(QIODevice::ReadOnly);
buffer->seek(0);
output->start(buffer);
很肮脏的解决方案,我认为它有内存泄漏...但它的工作原理!
这里是一个使用Qt的例子; http://diotavelli.net/PyQtWiki/Playing%20a%20sound%20with%20QtMultimedia
它使用QAudioOutput实现PCM音频播放。
这实际上是Python的Qt ...我会尝试将它“翻译”为C++ – 2010-09-09 15:42:35
那么,我觉得播放PCM音频是相当普遍的,所以它应该仍然很容易在Google上找到C++示例。这听起来像你是一个物理学家,而不是程序员,尽管如此,Qt可能对你来说太重了。看看Justin Peel关于将数据保存为.WAV并使用像PlaySound这样的简单API的评论。 – tenfour 2010-09-09 16:07:45
正弦? http://en.wikipedia.org/wiki/Sine_wave – 2010-09-09 13:56:37
我添加2间或更多正弦振荡,这导致非正弦振动 – 2010-09-09 13:58:37
这听起来像你有大致PCM格式的声音(或你能得到它这很容易),只要你的t之间有一个恒定的时间间隔dt。一旦它是pcm格式,那么你转换为wav并且可以在那里使用很多库(例如portaudio)。如果采样率(1/dt本质上)不是一个好数字,你可能会遇到问题。 – 2010-09-09 15:27:32