如何在简单的录音机程序中使用audioDeviceIOCallback,audioDeviceAboutToStart和audioDeviceStoptop

时间:2018-12-03 12:05:58

标签: c++ audio audio-recording juce

我使用Juce,尝试从demo runner创建一个简单的录音机。 我提取了AudioRecordingDemo来创建一个基于简单音频项目的录音机。

当我单击“开始录制”按钮时,sampleRate仍具有默认值:

void startRecording(const File& file)
    {
        stop();

        if (sampleRate > 0)
        { 
            // Create an OutputStream to write to our destination file...  
  

sampleRate = 0.0

在AudioRecordingDemo中,audioDeviceAboutToStart增加采样率。但是我的主要组件中没有任何AudioIODevice。

void audioDeviceAboutToStart(AudioIODevice* device) override
{
    sampleRate = device->getCurrentSampleRate();

}

设置输入和输出的AudioIODeviceCallback也从未在我的代码中调用。我试图在MainComponent类中使用它,但没有成功。

我还试图使MainComponent类继承自AudioIODeviceCallback:

class MainComponent : public Component,
         private AudioIODeviceCallback,
         private MidiInputCallback

{
public:
//...

我在Build a multi-polyphonic synthesiser tutorial中找到了这种方法。

但是当我尝试这样做时,我在主类中遇到了覆盖错误。

所以这是我的问题,如何使用我项目中AudioRecordingDemo类中定义的AudioIODeviceCallback,audioDeviceAboutToStart和audioDeviceStopped?

您可以找到源代码here

1 个答案:

答案 0 :(得分:0)

我通过在我的MainComponent类中添加audioDeviceIOCallback来解决我的问题:

void audioDeviceIOCallback (const float** /*inputChannelData*/, int /*numInputChannels*/,
                            float** outputChannelData, int numOutputChannels,
                            int numSamples) override
{
    // make buffer
    AudioBuffer<float> buffer (outputChannelData, numOutputChannels, numSamples);

    // clear it to silence
    buffer.clear();
}

最新的源代码:SimpleAudioRecorder