国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

qt6 多媒體開發(fā)代碼分析(二、錄音)

這篇具有很好參考價值的文章主要介紹了qt6 多媒體開發(fā)代碼分析(二、錄音)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

常見的音頻編碼格式包括MP3、AAC、OGG、WMA、FLAC等,它們之間具有以下區(qū)別:

  1. 編碼方式不同:這些編碼格式采用的編碼算法不同,例如MP3和AAC使用有損壓縮算法,而FLAC使用無損壓縮算法。

  2. 壓縮率和文件大小不同:由于采用的編碼算法不同,不同格式的音頻文件壓縮率和文件大小也不同。有損壓縮格式如MP3通常能夠?qū)⑽募嚎s至原始文件大小的10%左右,相對較小,但以犧牲一定的音質(zhì)為代價。無損壓縮格式如FLAC雖然壓縮率不如有損壓縮格式高,但保持了接近原始音頻文件的質(zhì)量,文件大小也比有損格式大。

  3. 支持性和兼容性不同:不同的音頻編碼格式在各種設備和軟件上的兼容性和支持性也不同。例如,MP3格式是最為普及的音頻格式之一,幾乎所有主流的音頻設備和軟件都支持;而FLAC格式雖然有著高保真的特點,但并不是所有設備和平臺都支持,特別是在移動設備上的使用較局限。

  4. 音質(zhì)表現(xiàn)不同:由于采用的編碼算法、參數(shù)和設置不同,不同格式的音頻文件在音質(zhì)表現(xiàn)上也會有所區(qū)別。例如,有些編碼格式對高音區(qū)的表現(xiàn)可能更優(yōu)秀,而有些編碼格式則可能更擅長處理低音區(qū)。

綜上所述,選擇哪種音頻編碼格式應根據(jù)實際需求和設備支持情況來判斷。如果需要在多平臺或多設備上播放音頻文件,一般建議選擇通用性較高、支持性廣泛的格式,如MP3、AAC等;如果注重音質(zhì),則可以考慮使用無損壓縮格式,如FLAC等。

MP3和AAC是兩種常見的音頻編碼格式,它們之間有以下區(qū)別:

  1. 編碼方式:MP3采用MPEG Audio Layer-3的編碼方式,而AAC采用Advanced Audio Coding的編碼方式。

  2. 壓縮效率:AAC相對于MP3具有更高的壓縮效率,即在相同的比特率下能夠提供更好的音質(zhì)。這意味著使用相同文件大小或比特率,AAC編碼的音頻文件往往會更清晰、更接近原始音頻。

  3. 音質(zhì)表現(xiàn):由于采用不同的編碼算法,AAC在相同比特率下通常具有更好的音質(zhì)表現(xiàn)。尤其在低比特率下,AAC能夠保持相對較好的音質(zhì),而MP3在低比特率下可能出現(xiàn)更明顯的失真和質(zhì)量損失。

  4. 文件大?。河捎贏AC更高的壓縮效率,相同音質(zhì)下的AAC文件大小通常會比MP3文件小一些。這對于存儲容量有限的設備和帶寬有限的網(wǎng)絡傳輸來說,可以節(jié)省空間和提升傳輸速度。

  5. 廣泛支持:MP3是最為廣泛支持的音頻格式之一,幾乎所有音頻設備和軟件都能播放MP3文件。而AAC作為較新的編碼格式,在一些舊版設備和軟件上可能不如MP3普及,但在現(xiàn)代設備和流媒體平臺上得到了廣泛支持。

總的來說,AAC相對于MP3具有更高的壓縮效率和更好的音質(zhì)表現(xiàn),而MP3則具有更廣泛的支持。選擇使用哪種格式應根據(jù)具體需求和設備的兼容性來決定。若追求更好的音質(zhì)或者希望節(jié)省空間和帶寬,AAC可能是更好的選擇;若需要在各種設備和軟件上保證兼容性,則MP3是一個較為安全的選擇。

????????音頻通道數(shù)是指音頻信號中包含的獨立聲音通道的數(shù)量。每個通道都可以攜帶單獨的音頻信息,例如左聲道、右聲道或者中央聲道等。

常見的音頻通道數(shù)有以下幾種:

  1. 單聲道(Mono):只有一個聲道,音頻信號通過一個單獨的通道進行傳輸。適用于部分語音、廣播和低成本音頻設備。

  2. 雙聲道(Stereo):包含左聲道(Left Channel)和右聲道(Right Channel),分別用于傳輸不同的音頻信息。大部分音樂、影視作品以及普通耳機、揚聲器都支持雙聲道。

  3. 立體聲(Joint Stereo):在雙聲道的基礎上,通過對左聲道和右聲道進行編碼,利用共享信息實現(xiàn)更高的壓縮效率。立體聲通常會保留左右聲道的獨立性,但一些低比特率的編碼方式可能會犧牲一定的聲音分離度。

  4. 多聲道(Multi-channel):除了左聲道和右聲道外,還包含額外的聲道,如中央聲道(Center Channel)、環(huán)繞聲道(Surround Channels)等。多聲道通常用于影院、家庭影院系統(tǒng),以及專業(yè)音頻領域,以提供更真實、沉浸式的音頻體驗。

音頻通道數(shù)決定了音頻信號可以攜帶的聲音分離度和立體感。選擇適合的音頻通道數(shù)取決于音頻內(nèi)容的特性以及播放設備的支持能力。例如,音樂作品通常會采用雙聲道或多聲道以提供立體聲效果,而語音錄音或電話通話可能只需要單聲道即可。

錄音時固定品質(zhì)和固定比特率是兩種不同的錄音設置方法,它們有以下區(qū)別:

  1. 固定品質(zhì):該設置方式的目的是保持錄制音頻的固定品質(zhì),通常以VBR(可變比特率)的方式實現(xiàn)。在固定品質(zhì)的設置下,編碼器會根據(jù)音頻信號的復雜程度動態(tài)調(diào)整比特率,使得音頻能夠達到相對穩(wěn)定并且高質(zhì)量的壓縮比率。因此,使用固定品質(zhì)設置可以獲得更好的音質(zhì)體驗,但文件大小可能會隨著音頻信號復雜程度的變化而發(fā)生變化。

  2. 固定比特率:該設置方式的目的是保持錄制音頻的固定比特率,通常以CBR(恒定比特率)的方式實現(xiàn)。在固定比特率的設置下,編碼器會始終以相同的比特率對音頻數(shù)據(jù)進行編碼,即使音頻信號復雜度發(fā)生變化,也不會改變編碼率。因此,使用固定比特率設置可以確保錄制的音頻文件大小、比特率的穩(wěn)定性,但音質(zhì)可能會受到影響,特別是在音頻信號復雜度變化較大的情況下。

總的來說,選擇固定品質(zhì)或固定比特率設置需要根據(jù)具體情況進行選擇。如果追求更好的音質(zhì)體驗,可以使用固定品質(zhì)設置;如果追求穩(wěn)定的文件大小和比特率,可以使用固定比特率設置。但需要注意的是,使用VBR設置時,音頻文件的大小可能會隨著信號復雜度的變化而產(chǎn)生變化,因此在一些容量受限或者網(wǎng)絡帶寬受限的場景下,需要權衡考慮。

qt6? 開發(fā)錄音主要是2個類:

  • QMediaCaptureSession對象,用于采集音頻和視頻。
  • recorder:QMediaRecorder對象,用于錄制音頻和視頻

QAudioInput 類? ?訪問連接到系統(tǒng)上的輸入設備 如麥克風等

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include    <QMainWindow>
#include    <QtMultimedia>


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE


class MainWindow : public QMainWindow
{
    Q_OBJECT

private:
    QMediaCaptureSession *session;
    QMediaRecorder  *recorder;

    void closeEvent(QCloseEvent *event);
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
//自定義槽函數(shù)
    void do_stateChanged(QMediaRecorder::RecorderState state);

    void do_durationChanged(qint64 duration);

    void on_actRecord_triggered();

    void on_btnGetFile_clicked();

    void on_actPause_triggered();

    void on_actStop_triggered();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

這段代碼是一個使用Qt框架實現(xiàn)的主窗口類MainWindow的頭文件。下面對其進行解釋:

  1. 包含了必要的頭文件:

    • <QMainWindow>:用于定義主窗口類的頭文件。
    • <QtMultimedia>:包含了多媒體相關的類和函數(shù)。
  2. 命名空間聲明:

    • QT_BEGIN_NAMESPACE?和?QT_END_NAMESPACE:用于將后續(xù)內(nèi)容置于Qt命名空間中,防止命名沖突。
    • namespace Ui:定義了一個名為Ui的命名空間。
  3. 類定義:

    • MainWindow:繼承自QMainWindow,表示主窗口類。
    • private部分:包含了私有的成員變量和函數(shù),不可以直接訪問。
      • session:用于存儲多媒體捕捉會話對象的指針。
      • recorder:用于存儲多媒體錄制對象的指針。
      • closeEvent:處理關閉事件的函數(shù),通過重寫該函數(shù)可以自定義在窗口關閉時執(zhí)行的操作。
    • public部分:包含了公共的成員函數(shù),可以從外部訪問。
      • 構(gòu)造函數(shù)MainWindow:用于創(chuàng)建MainWindow類的對象。
      • 析構(gòu)函數(shù)~MainWindow:用于銷毀MainWindow類的對象。
    • private slots部分:包含了一些私有槽函數(shù),用于處理信號和事件。
      • do_stateChanged:處理錄音狀態(tài)改變的槽函數(shù)。
      • do_durationChanged:處理錄音時長改變的槽函數(shù)。
      • on_actRecord_triggered:響應錄制觸發(fā)動作的槽函數(shù)。
      • on_btnGetFile_clicked:響應獲取文件按鈕點擊事件的槽函數(shù)。
      • on_actPause_triggered:響應暫停觸發(fā)動作的槽函數(shù)。
      • on_actStop_triggered:響應停止觸發(fā)動作的槽函數(shù)。
    • private部分:定義了一個私有成員變量ui,用于存儲MainWindow窗口的用戶界面對象。
  4. 宏定義:

    • #ifndef MAINWINDOW_H?和?#define MAINWINDOW_H:用于避免頭文件的重復包含。

總體來說,這段代碼定義了一個主窗口類MainWindow,其中包含了一些私有成員變量、公共成員函數(shù)和私有槽函數(shù),用于實現(xiàn)多媒體錄音功能的控制和操作。

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include    <QFileDialog>
#include    <QMessageBox>
#include    <QFileInfo>

void MainWindow::closeEvent(QCloseEvent *event)
{
    if (recorder->recorderState() != QMediaRecorder::StoppedState)
    {
        QMessageBox::information(this,"提示","正在錄音,不能退出");
        event->ignore();
    }
    else
        event->accept();
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    session = new QMediaCaptureSession(this);  //QMediaCaptureSession是采集音頻、視頻的類

    QAudioInput *audioInput= new QAudioInput(this);
    session->setAudioInput(audioInput);     // session 需要設置音頻輸入

    recorder= new QMediaRecorder(this);
    session->setRecorder(recorder);         //為session 設置 recorder

    connect(recorder,&QMediaRecorder::recorderStateChanged,
            this,&MainWindow::do_stateChanged);

    connect(recorder, &QMediaRecorder::durationChanged,
            this, &MainWindow::do_durationChanged);

    if (QMediaDevices::defaultAudioInput().isNull())    //如果沒有默認的音頻輸入設備
    {
        ui->groupBoxDevice->setTitle("錄音設置(無設備)");
        ui->actRecord->setEnabled(false);
        QMessageBox::information(this,"提示", "無音頻輸入設備");
        return;  //無音頻錄入設備
    }

     //音頻錄入設備列表
    foreach (QAudioDevice device, QMediaDevices::audioInputs())
        ui->comboDevices->addItem(device.description(), QVariant::fromValue(device));

    QMediaFormat format;        //默認的格式對象
    //支持的編碼格式
    foreach (QMediaFormat::AudioCodec encoder, format.supportedAudioCodecs(QMediaFormat::Encode))
        ui->comboCodec->addItem(QMediaFormat::audioCodecDescription(encoder),
                                QVariant::fromValue(encoder));
    //支持的文件格式
    foreach (QMediaFormat::FileFormat fileFormat, format.supportedFileFormats(QMediaFormat::Encode))
        ui->comboFileFormat->addItem(QMediaFormat::fileFormatDescription(fileFormat),
                                     QVariant::fromValue(fileFormat));
    //采樣頻率
    int minSampRate=audioInput->device().minimumSampleRate();   //輸入設備支持的最低采樣率
    ui->comboSampleRate->addItem(QString("Minimum %1").arg(minSampRate), minSampRate);
    int maxSampRate=audioInput->device().maximumSampleRate();   //輸入設備支持的最高采樣率
    ui->comboSampleRate->addItem(QString("Maximum %1").arg(maxSampRate), maxSampRate);
    ui->comboSampleRate->addItem("16000", 16000);   //添加了用戶數(shù)據(jù)
    ui->comboSampleRate->addItem("44100", 44100);
    ui->comboSampleRate->addItem("48000", 48000);
    ui->comboSampleRate->addItem("88200", 88200);

    //通道數(shù)
    int minChan=audioInput->device().minimumChannelCount();  //最少通道數(shù)
    ui->comboChannels->addItem(QString("Minimum %1").arg(minChan), minChan);
    int maxChan=audioInput->device().maximumChannelCount();  //最多通道數(shù)
    ui->comboChannels->addItem(QString("Maximum %1").arg(maxChan), maxChan);
    ui->comboChannels->addItem("1", 1);
    ui->comboChannels->addItem("2", 2);

    //固定品質(zhì)
    ui->sliderQuality->setRange(0, int(QImageCapture::VeryHighQuality));
    ui->sliderQuality->setValue(int(QImageCapture::NormalQuality));

    //固定比特率
    ui->comboBitrate->addItem("32000");
    ui->comboBitrate->addItem("64000");
    ui->comboBitrate->addItem("96000");
    ui->comboBitrate->addItem("128000");
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::do_stateChanged(QMediaRecorder::RecorderState state)
{ //錄音狀態(tài)變化
    bool isRecording = state==QMediaRecorder::RecordingState;   //正在錄制
    ui->actRecord->setEnabled(!isRecording);
    ui->actPause->setEnabled(isRecording);
    ui->actStop->setEnabled(isRecording);

    ui->btnGetFile->setEnabled(state==QMediaRecorder::StoppedState);
}

void MainWindow::do_durationChanged(qint64 duration)
{//錄音持續(xù)時間變化
    ui->labPassTime->setText(QString("已錄制 %1 秒").arg(duration / 1000));
}

//void MainWindow::processBuffer(const QAudioBuffer &buffer)
//{ //處理探測到的緩沖區(qū)
//    ui->spin_byteCount->setValue(buffer.byteCount());//緩沖區(qū)字節(jié)數(shù)
//    ui->spin_duration->setValue(buffer.duration()/1000);//緩沖區(qū)時長
//    ui->spin_frameCount->setValue(buffer.frameCount());//緩沖區(qū)幀數(shù)
//    ui->spin_sampleCount->setValue(buffer.sampleCount());//緩沖區(qū)采樣數(shù)

//    QAudioFormat audioFormat=buffer.format();//緩沖區(qū)格式
//    ui->spin_channelCount->setValue(audioFormat.channelCount()); //通道數(shù)
//    ui->spin_sampleSize->setValue(audioFormat.sampleSize());//采樣大小
//    ui->spin_sampleRate->setValue(audioFormat.sampleRate());//采樣率
//    ui->spin_bytesPerFrame->setValue(audioFormat.bytesPerFrame());//每幀字節(jié)數(shù)

//    if (audioFormat.byteOrder()==QAudioFormat::LittleEndian)
//        ui->edit_byteOrder->setText("LittleEndian");//字節(jié)序
//    else
//        ui->edit_byteOrder->setText("BigEndian");

//    ui->edit_codec->setText(audioFormat.codec());//編碼格式

//    if (audioFormat.sampleType()==QAudioFormat::SignedInt)//采樣點類型
//        ui->edit_sampleType->setText("SignedInt");
//    else if(audioFormat.sampleType()==QAudioFormat::UnSignedInt)
//        ui->edit_sampleType->setText("UnSignedInt");
//    else if(audioFormat.sampleType()==QAudioFormat::Float)
//        ui->edit_sampleType->setText("Float");
//    else
//        ui->edit_sampleType->setText("Unknown");

//}

void MainWindow::on_actRecord_triggered()
{ //開始錄音
    if (recorder->recorderState() == QMediaRecorder::PausedState)
    {//若是暫停狀態(tài),就繼續(xù)錄音
        recorder->record();
        return;
    }

    QString selectedFile=ui->editOutputFile->text().trimmed();
    if (selectedFile.isEmpty())
    {
        QMessageBox::critical(this,"錯誤","請先設置錄音輸出文件");
        return;
    }
    if (QFile::exists(selectedFile))
        QFile::remove(selectedFile);
    recorder->setOutputLocation(QUrl::fromLocalFile(selectedFile)); //設置輸出文件

//設置session的輸入設備
//    QVariant var =ui->comboDevices->itemData(ui->comboDevices->currentIndex());
//    QAudioDevice audioDevice= var.value<QAudioDevice>();
//    session->audioInput()->setDevice(audioDevice);
    session->audioInput()->setDevice(QMediaDevices::defaultAudioInput());

//設置 recorder 的 mediaFormat 參數(shù),包括文件格式和編碼格式
    QMediaFormat mediaFormat;
    QVariant var=ui->comboCodec->itemData(ui->comboCodec->currentIndex());
    QMediaFormat::FileFormat fileFormat= var.value<QMediaFormat::FileFormat>();
    mediaFormat.setFileFormat(fileFormat);  //設置文件格式

    var=ui->comboFileFormat->itemData(ui->comboFileFormat->currentIndex());
    QMediaFormat::AudioCodec audioCodec =var.value<QMediaFormat::AudioCodec>();
    mediaFormat.setAudioCodec(audioCodec);  //設置編碼格式

    recorder->setMediaFormat(mediaFormat);  //設置mediaFormat

//設置 recorder 的其他參數(shù)
    var=ui->comboSampleRate->itemData(ui->comboSampleRate->currentIndex());
    recorder->setAudioSampleRate(var.toInt());      //設置采樣率
    var=ui->comboChannels->itemData(ui->comboChannels->currentIndex());
    recorder->setAudioChannelCount(var.toInt());    //設置通道數(shù)
    recorder->setAudioBitRate(ui->comboBitrate->currentText().toInt());         //設置比特率
    recorder->setQuality(QMediaRecorder::Quality(ui->sliderQuality->value()));  //設置品質(zhì)
    if (ui->radioQuality->isChecked())              //設置編碼模式
        recorder->setEncodingMode(QMediaRecorder::ConstantQualityEncoding);     //固定品質(zhì)
    else
        recorder->setEncodingMode(QMediaRecorder::ConstantBitRateEncoding);     //固定比特率

    recorder->record();
}

void MainWindow::on_btnGetFile_clicked()
{ //設置保存文件
    QString curPath=QDir::currentPath();//獲取系統(tǒng)當前目錄
    QString dlgTitle="選擇輸出文件"; //對話框標題
    QString filter="所有文件(*.*);;MP3文件(*.mp3);;WMA文件(*.wma);;MP4文件(*.mp4)"; //文件過濾器
    QString selectedFile=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);

    if (!selectedFile.isEmpty())
    {
        ui->editOutputFile->setText(selectedFile);
        QFileInfo  fileInfo(selectedFile);
        QDir::setCurrent(fileInfo.absolutePath());
    }
}

void MainWindow::on_actPause_triggered()
{ //暫停
    recorder->pause();
}

void MainWindow::on_actStop_triggered()
{//停止
    recorder->stop();
}

這段代碼是一個錄音應用的主窗口類的實現(xiàn)。它使用Qt框架提供的多媒體模塊來實現(xiàn)錄音功能。

主要的成員變量包括:

  • session:QMediaCaptureSession對象,用于采集音頻和視頻。
  • recorder:QMediaRecorder對象,用于錄制音頻和視頻。

主要的成員函數(shù)包括:

  • closeEvent():重寫了窗口關閉事件,如果正在錄音,則彈出提示框,阻止窗口關閉。
  • do_stateChanged():槽函數(shù),處理錄音狀態(tài)變化的信號。根據(jù)錄音狀態(tài),啟用或禁用相關按鈕。
  • do_durationChanged():槽函數(shù),處理錄音持續(xù)時間變化的信號。更新顯示錄音時長的標簽。
  • on_actRecord_triggered():槽函數(shù),處理開始錄音按鈕的點擊事件。設置錄音輸出文件、音頻輸入設備、媒體格式等參數(shù),并開始錄音。
  • on_btnGetFile_clicked():槽函數(shù),處理選擇輸出文件按鈕的點擊事件。打開文件對話框,選擇保存錄音文件的路徑。
  • on_actPause_triggered():槽函數(shù),處理暫停錄音按鈕的點擊事件。暫停錄音。
  • on_actStop_triggered():槽函數(shù),處理停止錄音按鈕的點擊事件。停止錄音。

在構(gòu)造函數(shù)中,通過獲取音頻輸入設備列表,并分別添加到音頻輸入設備的下拉列表中。同時,還獲取了支持的編碼格式、文件格式、采樣頻率、通道數(shù)等信息,并將其分別添加到對應的下拉列表中。

????????總體來說,這段代碼實現(xiàn)了一個簡單的錄音應用的主窗口界面和錄音功能的實現(xiàn)。用戶可以選擇音頻輸入設備、設置媒體格式參數(shù),開始錄音,并可以暫停、停止錄音,并選擇保存錄音文件的路徑。文章來源地址http://www.zghlxwxcb.cn/news/detail-723874.html

到了這里,關于qt6 多媒體開發(fā)代碼分析(二、錄音)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 鴻蒙HarmonyOS開發(fā)實戰(zhàn)—多媒體開發(fā)(音頻開發(fā) 一)

    鴻蒙HarmonyOS開發(fā)實戰(zhàn)—多媒體開發(fā)(音頻開發(fā) 一)

    HarmonyOS音頻模塊支持音頻業(yè)務的開發(fā),提供音頻相關的功能,主要包括音頻播放、音頻采集、音量管理和短音播放等。 基本概念 采樣 采樣是指將連續(xù)時域上的模擬信號按照一定的時間間隔采樣,獲取到離散時域上離散信號的過程。 采樣率 采樣率為每秒從連續(xù)信號中提取并

    2024年01月24日
    瀏覽(30)
  • Android多媒體功能開發(fā)(2)——FileProvider

    使用系統(tǒng)多媒體界面需要在我們的應用和其他應用之間通過Intent傳遞音頻、圖片、視頻文件的信息。隨著Android版本的升級,對應用數(shù)據(jù)安全性方面的限制越來越多。 Android 6以后不允許應用在外部存儲隨便創(chuàng)建目錄,只能在Android規(guī)定的應用自己的文件目錄下創(chuàng)建目錄,該目錄

    2024年02月14日
    瀏覽(27)
  • HarmonyOS學習路之開發(fā)篇—多媒體開發(fā)(相機開發(fā) 一)

    HarmonyOS學習路之開發(fā)篇—多媒體開發(fā)(相機開發(fā) 一)

    HarmonyOS相機模塊支持相機業(yè)務的開發(fā),開發(fā)者可以通過已開放的接口實現(xiàn)相機硬件的訪問、操作和新功能開發(fā),最常見的操作如:預覽、拍照、連拍和錄像等。 相機靜態(tài)能力 用于描述相機的固有能力的一系列參數(shù),比如朝向、支持的分辨率等信息。 物理相機 物理相機就是獨

    2024年02月10日
    瀏覽(91)
  • HarmonyOS學習路之開發(fā)篇—多媒體開發(fā)(相機開發(fā) 二)

    Camera操作類,包括相機預覽、錄像、拍照等功能接口。 接口名 描述 triggerSingleCapture?(FrameConfig frameConfig) 啟動相機幀的單幀捕獲。 triggerMultiCapture?(ListFrameConfig frameConfigs) 啟動相機幀的多幀捕獲。 configure?(CameraConfig config) 配置相機。 flushCaptures?() 停止并清除相機幀的捕獲

    2024年02月11日
    瀏覽(91)
  • HarmonyOS學習路之開發(fā)篇—多媒體開發(fā)(圖像開發(fā) 二)

    圖像編碼就是將PixelMap圖像編碼成不同存檔格式圖片,用于后續(xù)其他處理,比如保存、傳輸?shù)?。當前僅支持JPEG格式。 ImagePacker主要用于圖像編碼。 接口名 描述 create() 創(chuàng)建圖像打包器實例。 initializePacking(byte[] data, PackingOptions opts) 初始化打包任務,將字節(jié)數(shù)組設置為打包后輸

    2024年02月11日
    瀏覽(97)
  • HarmonyOS學習路之開發(fā)篇—多媒體開發(fā)(圖像開發(fā) 一)

    HarmonyOS圖像模塊支持圖像業(yè)務的開發(fā),常見功能如圖像解碼、圖像編碼、基本的位圖操作、圖像編輯等。當然,也支持通過接口組合來實現(xiàn)更復雜的圖像處理邏輯。 圖像解碼 圖像解碼就是不同的存檔格式圖片(如JPEG、PNG等)解碼為無壓縮的位圖格式,以方便在應用或者系統(tǒng)

    2024年02月11日
    瀏覽(87)
  • HarmonyOS學習路之開發(fā)篇—多媒體開發(fā)(音頻開發(fā) 二(1)

    HarmonyOS學習路之開發(fā)篇—多媒體開發(fā)(音頻開發(fā) 二(1)

    接口說明 接口名 描述 AudioCapturer(AudioCapturerInfo audioCapturerInfo) throws IllegalArgumentException 構(gòu)造函數(shù),設置錄音相關音頻參數(shù),使用默認錄音設備。 AudioCapturer(AudioCapturerInfo audioCapturerInfo, AudioDeviceDescriptor devInfo) throws IllegalArgumentException 構(gòu)造函數(shù),設置錄音相關音頻參數(shù)并指定錄音

    2024年04月23日
    瀏覽(99)
  • Android多媒體功能開發(fā)(12)——使用Camera類拍照

    Android多媒體功能開發(fā)(12)——使用Camera類拍照

    Android上用攝像頭拍照、錄視頻有兩套API可用,Android5.0(API21)之前使用android.hardware.Camera類,之后推薦使用android.hardware.camera2包。目前這兩套API都可以使用,Camera類用起來比較簡單易懂,但功能少靈活性差,所以現(xiàn)在降級使用;Camera2框架功能強大,對攝像頭的控制靈活,但由于

    2023年04月13日
    瀏覽(25)
  • Android多媒體功能開發(fā)(11)——使用AudioRecord類錄制音頻

    Android多媒體功能開發(fā)(11)——使用AudioRecord類錄制音頻

    AudioRecord類優(yōu)點是能錄制到緩沖區(qū),能夠?qū)崿F(xiàn)邊錄邊播(AudioRecord + AudioTrack)以及對音頻的實時處理(如QQ電話)。缺點是輸出是PCM格式的原始采集數(shù)據(jù),如果直接保存成音頻文件,不能夠被播放器播放,所以必須用代碼實現(xiàn)數(shù)據(jù)編碼以及壓縮。 使用AudioRecord錄音的基本步驟是

    2023年04月09日
    瀏覽(24)
  • SDL庫入門:掌握跨平臺游戲開發(fā)和多媒體編程

    SDL (Simple DirectMedia Layer) 是一個跨平臺的開源多媒體庫,它提供了訪問音頻、鍵盤、鼠標、操縱桿以及圖形硬件的底層接口。SDL 可用于開發(fā)游戲、仿真器、媒體播放器等多種類型的應用程序。 1.1 SDL 的背景與應用領域 SDL 由 Sam Lantinga 開發(fā),最早發(fā)布于 1998 年。SDL 的設計目標是

    2024年02月02日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包