• 12754阅读
  • 9回复

怎样用Qt编写录音程序? [复制链接]

上一主题 下一主题
离线lanyu
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-12
— 本帖被 XChinux 执行加亮操作(2010-11-04) —
怎么用qt写一个简单的录音程序啊?我看了Demo中的例子,里面的代码好有难度的,还有就是不知道如何将录音的结果保存到磁盘上?
谢谢啦
离线磐石
只看该作者 1楼 发表于: 2010-04-17
关于录音,好像在QT4.6引入了一个新的模块(QtMultimedia Module)能提供录音接口函数,这有一段程序,是用于录音并保存的,来自QT4.6的帮助文档,你自己可以查看帮助文档,
QFile outputFile;   // class member.
QAudioInput* audio; // class member.
{
   outputFile.setFileName("/tmp/test.raw");
   outputFile.open( QIODevice::WriteOnly | QIODevice::Truncate );

   QAudioFormat format;
   // set up the format you want, eg.
   format.setFrequency(8000);
   format.setChannels(1);
   format.setSampleSize(8);
   format.setCodec("audio/pcm");
   format.setByteOrder(QAudioFormat::LittleEndian);
   format.setSampleType(QAudioFormat::UnSignedInt);

   if (QAudioDeviceInfo info(QAudioDeviceInfo::defaultInputDevice());
   if (!info.isFormatSupported(format)) {
       qWarning()<<"default format not supported try to use nearest";
       format = info.nearestFormat(format);
   }

   audio = new QAudioInput(format, this);
   QTimer::singleShot(3000, this, SLOT(stopRecording()));
   audio->start(&outputFile);
   // Records audio for 3000ms
}

void stopRecording()
{
   audio->stop();
   outputFile->close();
   delete audio;
}
不怕做不到,只怕想不到
离线dunniu

只看该作者 2楼 发表于: 2010-11-04
不过我无法播放raw格式的音频
离线jianlanger
只看该作者 3楼 发表于: 2010-11-10
就按照上面的写就可以我有写好的代码。
离线jianlanger
只看该作者 4楼 发表于: 2010-11-10
AudioPlay::AudioPlay()
{
    settings.setFrequency(8000);
    settings.setChannels(1);
    settings.setSampleSize(16);
    settings.setCodec("audio/pcm");
    settings.setByteOrder(QAudioFormat::LittleEndian);
    settings.setSampleType(QAudioFormat::SignedInt);
    audioOutput = new QAudioOutput(settings,this);
    this->setWindowFlags(Qt::SubWindow);
    this->hide();
}

AudioPlay::~AudioPlay()
{
    delete [] buffer;
}

void AudioPlay::play(QString dir)
{
    outPutFile.setFileName(dir);
    outPutFile.open(QIODevice::ReadOnly);
    audioOutput->start(&outPutFile);
    //outPutFile.close();

}

void AudioPlay::stopPlay()
{
    audioOutput->stop();
}

这个就是播放的,和录的时候的设置一样就可以了。不一样播放的就是杂音。
离线net1999
只看该作者 5楼 发表于: 2011-03-23
dialog.obj:: error:  无法解析的外部符号 "__declspec(dllimport) public: void __thiscall QAudioFormat::setSampleSize(int)" (__imp_?setSampleSize@QAudioFormat@@QAEXH@Z),该符号在函数 "private: void __thiscall Dialog::on_pushButton_clicked(void)" (?on_pushButton_clicked@Dialog@@AAEXXZ) 中被引用

试着把录音代码放到一个空GUI工程中的一个按钮事件上,可是结果编译出错,以上的“无法解析的外部符号”共十几个,不知道哪里不对头。
离线sapphirezzz
只看该作者 6楼 发表于: 2011-03-25
请问一楼那个例子怎么组织?
第一个大括号里面的是放在main函数里面还是?
离线sapphirezzz
只看该作者 7楼 发表于: 2011-03-26
现在找到一个例子,可以用的。你可以试下。
附件: audioRecorder.zip (4 K) 下载次数:39
离线hyf200888
只看该作者 8楼 发表于: 2011-09-17
学习学习!!
离线jptiancai

只看该作者 9楼 发表于: 2011-09-19
  我们公司正在用C#开发录音程序,不过可以借鉴下,顶!
快速回复
限100 字节
 
上一个 下一个