recording voice on BBB



  • Hi
    I'm trying to make a Qt App to receive the voice from microphone and record it to a wav (prefer flac) file.
    I found some example with Qaudioinput and QAudioOutput. I use these code for find the Audio input default:

    QAudioDeviceInfo infoIn(QAudioDeviceInfo::defaultInputDevice());
    qDebug()<<"Device name:" << infoIn.deviceName();
    

    I expect these two line of code shows me my sound card information. But it's show null.
    Am I expecting correct.
    If not how can I found the sound card information.
    this is my full code :

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QDebug>
     const int BufferSize = 14096;
    
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
           m_Inputdevice(QAudioDeviceInfo::defaultInputDevice())
        ,   m_Outputdevice(QAudioDeviceInfo::defaultOutputDevice())
        ,   m_audioInput(0)
        ,   m_audioOutput(0)
        ,   m_input(0)
        ,   m_iVolume(0)
        ,   m_buffer(BufferSize, 0)
        ,   ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        initializeAudio();
    }
    
    
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    //Initialize audio
    void MainWindow::initializeAudio()
    {
    
        m_format.setFrequency(8000); //set frequency to 8000
        m_format.setChannels(1); //set channels to mono
        m_format.setSampleSize(16); //set sample sze to 16 bit
        m_format.setSampleType(QAudioFormat::UnSignedInt ); //Sample type as usigned integer sample
        m_format.setByteOrder(QAudioFormat::LittleEndian); //Byte order
        m_format.setCodec("audio/pcm"); //set codec as simple audio/pcm
    
        QAudioDeviceInfo infoIn(QAudioDeviceInfo::defaultInputDevice());
        if (!infoIn.isFormatSupported(m_format))
        {
            //Default format not supported - trying to use nearest
            m_format = infoIn.nearestFormat(m_format);
        }
    
        QAudioDeviceInfo infoOut(QAudioDeviceInfo::defaultOutputDevice());
    
        if (!infoOut.isFormatSupported(m_format))
        {
           //Default format not supported - trying to use nearest
            m_format = infoOut.nearestFormat(m_format);
        }
        createAudioInput();
        createAudioOutput();
    }
    
    void MainWindow::createAudioOutput()
    {
        m_audioOutput = new QAudioOutput(m_Outputdevice, m_format, this);
    }
    void MainWindow::createAudioInput()
    {
        if (m_input != 0) {
            disconnect(m_input, 0, this, 0);
            m_input = 0;
        }
    
        m_audioInput = new QAudioInput(m_Inputdevice, m_format, this);
    
    }
    void MainWindow::readMore()
    {
        //Return if audio input is null
        if(!m_audioInput)
            return;
    
        //Check the number of samples in input buffer
        qint64 len = m_audioInput->bytesReady();
    
        //Limit sample size
        if(len > 4096)
            len = 4096;
        //Read sound samples from input device to buffer
        qint64 l = m_input->read(m_buffer.data(), len);
        if(l > 0)
        {
            //Assign sound samples to short array
            short* resultingData = (short*)m_buffer.data();
    
    
            short *outdata=resultingData;
            outdata[ 0 ] = resultingData [ 0 ];
    
             int iIndex;
             if(ui->chkRemoveNoise->checkState() == Qt::Checked)
             {
                    //Remove noise using Low Pass filter algortm[Simple algorithm used to remove noise]
                    for ( iIndex=1; iIndex < len; iIndex++ )
                    {
                        outdata[ iIndex ] = 0.333 * resultingData[iIndex ] + ( 1.0 - 0.333 ) * outdata[ iIndex-1 ];
                    }
              }
    
             for ( iIndex=0; iIndex < len; iIndex++ )
             {
                 //Cange volume to each integer data in a sample
                 outdata[ iIndex ] = ApplyVolumeToSample( outdata[ iIndex ]);
             }
    
             //write modified sond sample to outputdevice for playback audio
              m_output->write((char*)outdata, len);
    
        }
    
    }
    
    int MainWindow::ApplyVolumeToSample(short iSample)
    {
        //Calculate volume, Volume limited to  max 35535 and min -35535
        return std::max(std::min(((iSample * m_iVolume) / 50) ,35535), -35535);
    
    }
    
    
    void MainWindow::on_pushButton_clicked()
    {
        //Audio output device
        m_output= m_audioOutput->start();
         //Audio input device
        m_input = m_audioInput->start();
        //connect readyRead signal to readMre slot.
        //Call readmore when audio samples fill in inputbuffer
        connect(m_input, SIGNAL(readyRead()), SLOT(readMore()));
    
    }
    
    
    
    
    void MainWindow::on_horizontalSlider_valueChanged(int value)
    {
        m_iVolume = value;
    }
    

    Thank you
    Iman


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.