gpt4 book ai didi

qt - 如何更改音频 AVPacket 的音量

转载 作者:行者123 更新时间:2023-12-04 23:04:30 25 4
gpt4 key购买 nike

我有一个基于 Qt 的桌面应用程序,它从网络获取声音流并使用 QAudioOutput 播放它.我想为用户提供音量控制,以便他可以降低音量。我的代码如下所示:

float volume_control = get_user_pref(); // user provided volume level {0.0,1.0}

for (;;) {
AVPacket *retrieved_pkt = get_decoded_packet_stream(); // from network stream

AVPacket *work_pkt
= change_volume(retrieved_pkt, volume_control); // this is what I need

// remaining code to play the work_pkt ...
}

如何实现 change_volume()还是我可以使用任何现成的功能?

编辑:根据评论中的要求添加编解码器相关信息
QAudioFormat format;
format.setFrequency(44100);
format.setChannels(2);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);

最佳答案

下面的代码工作得很好。

// audio_buffer is a byte array of size data_size 
// volume_level is a float between 0 (silent) and 1 (original volume)

int16_t * pcm_data = (int16_t*)(audio_buffer);
int32_t pcmval;
for (int ii = 0; ii < (data_size / 2); ii++) { // 16 bit, hence divided by 2
pcmval = pcm_data[ii] * volume_level ;
pcm_data[ii] = pcmval;
}

编辑:我认为这里有很大的优化范围,因为我的解决方案是计算密集型的。我猜 avcodec_decode_audio()可以用来加速它。

关于qt - 如何更改音频 AVPacket 的音量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13970236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com