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

How to use audioDeviceIOCallback, audioDeviceAboutToStart and audioDeviceStopped in a simple audio recorder program

我尝试使用 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 class 中使用它但没有成功。

我还尝试让 MainComponent class 继承自 AudioIODeviceCallback :

class MainComponent : public Component,
         private AudioIODeviceCallback,
         private MidiInputCallback

{
public:
//...

我在 Build a multi-polyphonic synthesiser tutorial.

中找到了这个方法

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

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

您可以找到源代码here

我通过将 audioDeviceIOCallback 添加到我的 MainComponent Class 解决了我的问题:

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