首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用C ++中的libmad库将24 khz的mp3音频转换为16 khz的wav?

要将24 kHz的MP3音频转换为16 kHz的WAV,可以使用C++中的libmad库进行处理。libmad是一个开源的音频解码库,可以解码MP3文件并将其转换为其他音频格式。

首先,需要安装libmad库并将其包含到C++项目中。可以通过在项目中添加libmad的头文件和链接libmad的库文件来实现。

接下来,需要使用libmad库提供的函数来进行音频解码和转换。以下是一个基本的示例代码:

代码语言:cpp
复制
#include <mad.h>

void convertMP3toWAV(const char* mp3File, const char* wavFile) {
    FILE* mp3 = fopen(mp3File, "rb");
    FILE* wav = fopen(wavFile, "wb");

    // 初始化libmad解码器
    struct mad_stream stream;
    struct mad_frame frame;
    struct mad_synth synth;
    mad_stream_init(&stream);
    mad_frame_init(&frame);
    mad_synth_init(&synth);

    // 设置输入流
    mad_stream_buffer(&stream, mp3, BUFSIZ);

    // 设置输出流
    // 这里假设目标音频为16 kHz的WAV文件
    int sampleRate = 16000;
    int numChannels = 1; // 单声道
    int bitsPerSample = 16;
    int byteRate = sampleRate * numChannels * (bitsPerSample / 8);
    int blockAlign = numChannels * (bitsPerSample / 8);
    fwrite("RIFF", 1, 4, wav);
    fwrite("\0\0\0\0", 1, 4, wav); // 先占位,待后续填充
    fwrite("WAVEfmt ", 1, 8, wav);
    fwrite("\20\0\0\0", 1, 4, wav); // PCM格式
    fwrite("\1\0", 1, 2, wav); // 单声道
    fwrite(&numChannels, 1, 2, wav);
    fwrite(&sampleRate, 1, 4, wav);
    fwrite(&byteRate, 1, 4, wav);
    fwrite(&blockAlign, 1, 2, wav);
    fwrite(&bitsPerSample, 1, 2, wav);
    fwrite("data", 1, 4, wav);
    fwrite("\0\0\0\0", 1, 4, wav); // 先占位,待后续填充

    // 解码并转换音频
    while (mad_frame_decode(&frame, &stream) == 0) {
        mad_synth_frame(&synth, &frame);
        mad_fixed_t const* left_ch = synth.pcm.samples[0];
        mad_fixed_t const* right_ch = synth.pcm.samples[1];

        for (unsigned int i = 0; i < synth.pcm.length; i++) {
            mad_fixed_t sample = mad_f_divide(left_ch[i], MAD_F_ONE);
            mad_fixed_t scaled = mad_f_multiply(sample, MAD_F_ONE);
            mad_fixed_t rounded = mad_f_todouble(scaled);
            mad_fixed_t clamped = mad_f_clip(rounded, -32767, 32767);
            mad_fixed_t offset = mad_f_add(clamped, MAD_F_ONE);
            mad_fixed_t shifted = mad_f_multiply(offset, MAD_F_ONE_HALF);
            mad_fixed_t quantized = mad_f_todouble(shifted);
            int16_t pcm_sample = quantized;

            fwrite(&pcm_sample, 1, sizeof(pcm_sample), wav);
        }
    }

    // 清理资源
    mad_synth_finish(&synth);
    mad_frame_finish(&frame);
    mad_stream_finish(&stream);

    // 填充WAV文件头信息
    fseek(wav, 4, SEEK_SET);
    uint32_t fileSize = ftell(wav) - 8;
    fwrite(&fileSize, 1, 4, wav);
    fseek(wav, 40, SEEK_SET);
    uint32_t dataSize = ftell(wav) - 44;
    fwrite(&dataSize, 1, 4, wav);

    // 关闭文件
    fclose(mp3);
    fclose(wav);
}

int main() {
    const char* mp3File = "input.mp3";
    const char* wavFile = "output.wav";
    convertMP3toWAV(mp3File, wavFile);
    return 0;
}

上述代码中,convertMP3toWAV函数接受两个参数:输入的MP3文件路径和输出的WAV文件路径。函数内部使用libmad库进行解码和转换,并将结果写入到WAV文件中。

需要注意的是,上述示例代码只是一个简单的示例,可能需要根据实际情况进行适当的修改和优化。另外,还需要确保在编译时链接libmad库。

关于libmad库的更多信息和使用方法,可以参考官方文档:libmad - MPEG Audio Decoder

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【AirPlay2】AirPlay升级后FLAC和ALAC无损音乐格式究竟是什么?

,主要在音乐版块增加了很多功能: 使用者可以音乐同步发送到多个AirPlay 2 扬声器; 改进了音频缓冲问题,播放环境更稳定更可靠; 可以指定房间播放音频,建立一个多房间音响系统(Multi-room...ALAC 可以 WAV、AIFF 等非压缩音频大小缩减至原本 40% 至 60%,效率相当高,而且编码速度几快。...规格方面都好强,支援 8 个声道,16、20、24、32bit 取样位元深度,以及最高 384kHz 取样率,足以应付现时几乎所有的 Hi-Res音质。...最高支持 32bit/655kHz、8 个声道 大家听歌听得最多可能是两声道CD 16bit/44.1kHz 位元率,Hi-Res 音乐常见24bit/96kHz24bit/192kHz 等等,其实...至于歌方面,要留意 FLAC 只是保留原有音质,所以 CD 转了 FLAC 24bit/192kHz 并不会无端端变成 Hi-Res,音质实际仍只是 16bit/44.1kHz,不过存储占用空间就大了

6.9K10

语音深度鉴伪识别项目实战:基于深度学习语音深度鉴伪识别算法模型(一)音频数据编码与预处理

高采样率能够更准确地表示原始信号,但也会产生更多数据。量化:每个采样点幅值转换为最接近离散值,通常使用16位或24位表示。...量化位数(如16位、24位)决定了每个采样点精度,量化过程会引入量化误差,位数越高,误差越小,音质越好。编码:量化后值编码为二进制数,形成数字信号。通常使用整型数表示量化后幅值。...MP3音频信号分解为多个子带,每个子带使用不同量化和编码策略。...通过子带分离,每个子带使用不同量化和编码策略,MP3编码器可以更有效地利用心理声学模型进行压缩,而且MP3使用离散余弦变换(DCT)时域信号转换为频域信号,方便应用心理声学模型和量化。...实现MP3编码可以使用Pythonpydub和ffmpeg工具。pydub是一个简单易用音频处理,ffmpeg是一个强大多媒体处理工具,可以处理多种音频格式,包括MP3

23773

小白音频测试之Python对音频进行频谱分析

前驱知识 Python需要使用相关 wave https://docs.python.org/3/library/wave.html pyaudio http://people.csail.mit.edu...一般音乐CD采样率是44100Hz,所以视频编码音频采样率保持在这个级别就完全足够了,通常视频转换器也这个采样率作为默认设置。 2.帧率(Frame rate):是用于测量显示帧数量度。...3.码率(Bit Rate):指视频或音频文件在单位时间内使用数据流量,该参数单位通常是Kbps,也就是千比特每秒。通常2000kbps~3000kbps就已经足以画质效果表现到极致了。...常用音频采样频率有8kHz、11.025kHz、22.05kHz16kHz、37.8kHz、44.1kHz、48kHz等,如果采用更高采样频率,还可以达到DVD音质 对采样率为44.1kHz...str_data,这是一个string类型数据 str_data = wf.readframes(nframes) wf.close() 音频波形数据转换为数组 # A new 1-D array

5.4K52

音视频相关技术基础知识总结

常见帧率典型值: (1)24/25 fps:1秒24/25帧,一般电影频率。...,在计算机音频只是存储在计算机里声音。...PCM:音频数据承载方式最常用是脉冲编码调制。 在自然界,声音是连续不断,是一种模拟信号,那怎样才能把声音保存下来呢?就是这些模拟信号数字化,即模数转换,模拟信号转换为数字信号。...采样率 * 采样位数 * 声道数 3.7、常见音频格式 CD格式、WAVE(*.WAV)、AIFF、MP3、MIDI、AAC、WMA、OggVorbis 4、FFmpeg 4.1、FFmpeg是什么?...ffmpeg:音视频转码、转换器 ffplay:简单音视频播放器 ffserver:流媒体服务器 ffprobe:简单多媒体码流分析器 (2)SDK 提供开发者使用SDK,我们可以根据自己需求使用这些开发自己应用程序

1.5K41

Android音频编辑之音频转换PCM与WAV

PCM文件WAV文件 现在先给出音频编辑效果图,看看能不能提高大家积极性~,哈哈 ? ? ? 常用音频格式简介 在Android平台上进行音频开发,首先需要对常用音频格式有个大致了解。...WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44.1kHz采样频率,16位量化位数,因此WAV音质与CD相差无几,但WAV格式对存储空间需求太大不便于交流和传播。...WAV也可以使用多种音频编码来压缩其音频流,不过我们常见都是音频流被PCM编码处理WAV,但这不表示WAV只能使用PCM编码,MP3编码同样也可以运用在WAV,和AVI一样,只要安装好了相应Decode...因此,基于PCM编码WAV被作为了一种中介格式,常常使用在其他编码相互转换之中,例如MP3换成WMA。...PCM文件WAV文件 现在我们得到了解码后PCM文件,但是它是不可直接播放,因为不带音频相关格式信息,下面我们PCM和指定音频相关格式信息去转换得到一个可播放WAV文件: /** * PCM

5.8K30

31.Linux-wm9876声卡驱动(移植+测试)

本节学习目的 1)分析LinuxOSS声卡系统 2)移植wm9876声卡 3)使用madplay应用程序播放mp3 1.声音三要素 采样频率 音频采样率是指录音设备在一秒钟内对声音信号采样次数,... - 音频 CD, 也常用于 MPEG-1 音频(VCD, SVCD, MP3)所用采样率 48KHz   - miniDV、数字电视、DVD、DAT、电影和专业音频所用数字声音所用采样率 50KHz...chips              //*:/linux-2.6.22.6/sound/soc/s3c24xx下makefile指定文件加入内核里 5.2 修改好s3c-wm8976.c放入...6.测试与运行 6.1使用wav测试声卡 wav是属于一个未经压缩音频文件,所以可以直接调用给我们声卡播放 播放:      cat Windows.wav > /dev/dsp 录音(还需要修改下驱动才行...madplay 步骤如下: 1)首先下载并解压3个文件 libid3tag-0.15.1b.tar.gz                      //mp3解码 libmad-0.15.1b.tar.gz

4.9K71

KT148A语音芯片420s秒语音空间是什么意思_mp3文件支持多大

】4、这里以最小mp3格式举例:歌曲本身长度是22.5秒==》如果压缩为16KHZ16bit参数,他大小是48Kbyte 。...那么意味着,基本上1秒钟语音需要占用大概2Kbyte空间==》如果压缩为8KHZ,8bit参数,他大小是24Kbyte。那么意味着,基本上1秒钟语音需要占用大概1Kbyte空间 。...实际使用不建议压缩这么低参数5、正常文件,对于mp3级别的音质,我们建议在空间允许情况下,尽量文件压缩为32KHZ、32bit这个参数 。...如果空间实在不够,就建议压缩为16KHZ16bit 。...一定不建议压缩为8KHZ,8bit,因为这个参数对音质损耗实在太大了6、如果有其他格式文件,比如:wav格式,或者wma等等,建议先压缩为mp3之后,再进行转换,每次压缩,记得在电脑端试听一下效果。

15310

音频数字化简单原理「建议收藏」

男性语音为180Hz,女性歌声为600Hz,钢琴上 C调至A调间为440Hz,电视机发出人所能听到声音是17kHz,人耳能够感知最高声音频 率为20kHz音频数字化,其实就是声音数字化。...经常使用采样频率有11.025kHz、22.05kHz和44.lkHz等。采样频率越高 ,声音失真越小、音频数据量越大。...因此,才会出现各种音频压缩编/解码技术出现,例如,MP3,RM,WMA,VQ F,ASF等等它们各自有自己应用领域,并且不断在竞争求得发展。...WAVE、MIDI、MP3、RM常见音频格式简介 WAVE–WINDOWS系统最基本音频格式—*.wav 1、占用巨大硬盘空间,音质最好,支持音乐与语音 2、通常采样使用44KHZ采样/秒,16位...最流行音频压缩格式—*.mp3 1、节省硬盘空间,有损压缩,无法复原 2、音质与不同压缩编码软件有关 3、音乐与语音,可以使用各种采样比率 RM–网络流媒体压缩格式—*.rm/*.ra 1、节省磁盘空间

2.1K20

H5实时解码音频并播放

里面放到是经过编码音视频数据,而这些音视频数据都有自己编码格式,如AAC、H264、H265等等。 今天要展示是从直播流获取到音频编码数据进行解码并使用H5音频API进行播放过程。...这些格式分别是 1. speex 2. aac 3. mp3 这些格式都有开源解码,不过都是c,在H5需要通过emscripten编译成js执行。...,bufferFilled用于指示缓冲没有使用数据,outputBuffer用来存放解码后数据。...比较复杂,这里不贴代码了,主要是mad不能直接调用其提供API,直播流MP3数据和mp3文件格式有所不同导致。...copyToCtxBuffer 函数用于音频数据拷贝进可以播放缓冲数组

1.1K20

【FFmpeg】ffmpeg 命令行参数 ③ ( ffmpeg 音频参数解析 | 设置音频帧数 | 设置音频码率 | 设置音频采样率 | 设置音频通道数 | 设置音频编解码器 | 设置音频过滤器 )

音频输出长度 有些过时 ; 新版本 ffmpeg , 推荐使用 -t 参数 结合 视频 或 音频 帧率 来间接控制输出帧数 ; 需要 精确控制 输出帧数 时 , 使用 -aframes 参数...命令 , input.mp4 视频 前 100 帧 音频 输出到 output.mp3 音频文件 ; -vn 参数可以禁用视频输出 , 如果输出文件是音频格式 , 该参数可以不写 ; 3、... 音频 输出到 output.mp3 音频文件 , 该音频 采样率为 44100Hz ; 转换前 input.mp4 视频 音频 采样率为 48000Hz ( 48.0kHz ) , 转换后...input.mp4 视频 音频 输出到 output.mp3 音频文件 , 使用 libmp3lame 编码器 aac 格式音频转为 mp3 格式音频 ; 转换前 input.mp4 视频..." , 音频滤镜 之间 使用 逗号 隔开 , 并按照指定顺序 转换效果 应用于 正在播放 音频 ; " 音频滤镜链 " 是一个 描述 音频滤镜 及其 参数 字符串 , 可以通过 该参数 来 设置

1.4K10

音质评价(二):音质好坏由什么决定

在上文中讲到,采样是把连续声音模拟信号转换为离散数字信号手段,那么在这个采样过程,用多高采样率是合理呢?...至于为什么是44.1kHz,这就是历史遗留原因了,跟早期录音设备有关,早期录音使用是PAL录像制式(帕制,与之对应有NTSC),场频 50Hz ,可用扫描线数 294 条,一条视频扫描线磁迹记录...为什么通常mp3格式音频质量,我们感觉会比其他格式差很多?常听歌的人,通常会下载wav格式或者flac格式音频,为什么大家天然不信任“mp3音质?...)127MB几个参数含义:Stereo为双声道,Mono为单声道,s1616位;从上表参数对比,不难看出其中区别,越是好音质,码率越高,且不再使用mp3格式。...它音质表现远远超过现有压缩音频格式、CD,音频格式规格可高达192kHz / 24bit或者更高解析度依据CTA定义:“Hi-Res高解析音频是一种无损音频,它在录音上力求最大程度还原源声,其音质表现高于

1.8K70

音视频必知会(一)

8khz:电话等使用,对于记录人声已经足够使用。 22.05khz:广播使用频率。 44.1khz音频CD。 48khz:DVD、数字电视中使用。...96khz-192khz:DVD-Audio、蓝光高清等使用。...这个时间被称之为“采样时间”,其长度没有特别的标准,它是根据具体应用需求来决定,我们可以计算一下一帧音频大小: 假设某通道音频信号是采样率为8kHz,位宽为16bit,20ms一帧,双通道,则一帧音频数据大小为...MP3(有损) MP3具有不错压缩比,使用LAME编码(MP3编码格式一种实现)中高码率MP3文件,听感上非常接近源WAV文件。现如今市面上音乐大多是这种编码格式。...9.编解码 编码:编码就是原始音频数据也就是PCM压缩一个过程;或者是原始视频数据RGB或YUV压缩一个过程。

1.4K61

Audio ABC | CD为何是44.1KHz采样率?

小朋友英语学习培训教材附送了一张音频CD,作者在鼓捣这张CD时候,忽然一个问题冒了出来:为什么CD采用了44.1KHz采样率?为什么不是48KHz?毕竟48这个数字看起来整齐多。...•8K、16K、32K、64K、128K•12K、24K、48K、96K、192K•11.025K、22.05K、44.1K、88.2K 采样精度 如果说采样频率对应是时间维度上对于声音采样,那么采样精度就是对应幅度维度...采样精度,通常有8bit、16bit、24bit、32bit这几种。 音频通道 还有一个概念就是声音通道数量,常见就是两个声道,一左一右。家庭影院声道数量更丰富一些,一般不大于十个。...相比大家熟悉MP3格式文件,wav直接保存就是PCM编码声音幅度信息,而采样频率、采样精度以及声音通道数目,就在wav文件头中标明。...简单来说,存放于CD音频编码标准就是声音通道数为2、采样精度16bit、编码格式为线性PCM、采样率固定是44.1KHz。 ?

4.2K21

视频直播带宽最强计算过程

采样率通常有24KHz、44.1KHz、48KHz等。 ? 常见数字音频采样率 现在视频直播基本上都是用44.1KHz或48KHz采样率。 然后是采样位数,也称为位深、精度、比特。...声音采样位数有8bit,16bit,24bit等。 一个bit数据大约可以记录6dB声音,故定义0dB为峰值。常见16bit(CD音质),可以记录大概96分贝动态范围。...24bit声音动态范围-144dB(24×6)—0dB。 人耳无痛苦极限声压是90分贝,所以,一般来说数字音频基本上都会采用16bit采样位数。...所以,在无损无压缩格式(例如wav格式)音频码率=采样率(48k)× 位深度(16)× 通道数(2)= 1,536 kbps。...Mp3通过抽取音频一些频段来达到提高压缩比,降低码率,减少所占空间,但同时声音细节如人声情感、后期混响等等都已经发生变形。盲听的话也很难较快地分辨出wavmp3,需要借助设备。

2.6K20

Adobe Audition 2016 中文版软件安装教程AU软件全版本下载

本文重点介绍Adobe Audition软件音频精度解析方面,从多个角度对其进行详细阐述和分析。...id=dtfyguhTRFGYUHJK音频精度定义在电子数据,精度是指一个由数据每个元素构成量,它表示该元素可以携带多大信息量。...音频量化位数Adobe Audition软件支持16位和24音频量化位数,它表示了用于存储采样数字值二进制位数。24位比16位具有更高精度,并且可以获得更高动态范围和更少噪音。3....音频格式支持Adobe Audition软件支持多种音频格式,包括WAVMP3、FLAC、AAC等格式。它可以进行多种格式之间转换,并且支持多种高级音频技术,如Dolby Digital和DTS。...通过使用Adobe Audition软件,用户可以更好地了解音频数据精度和质量,更好地处理和编辑音频数据,带来更好音频体验和效果。

38110

音频格式汇总及压缩比较

本文自:果果文本 原文标题:19种音频格式介绍及音质压缩比比较 音频相关参数 速率 什么是速率?当然我不能直接给你解释说“速率就是比特率”。...MP3是利用MPEGAudio Layer 3技术,音乐以1:10甚至1:12压缩率,压缩成容量较小文件,换句话说,能够在音质丢失很小情况下把文件压缩到更小程度。...小30%~50%,更便利于网上传播,同时音质极佳,接近CD音质(16位44.1kHz立体声)。...无损压缩 对于我们最常说“无损音频”来说,一般都是指传统CD格式16bit/44.1kHz采样率文件格式,而知所以称为无损压缩,也是因为其包含了20Hz-22.05kHz这个完全覆盖人耳可闻范围频响频率而得名...WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44.1kHz采样频率,16位量化位数,因此WAV音质与CD相差无几,但WAV格式对存储空间需求太大不便于交流和传播。

9.5K31

Python爬虫有用:pydub,处理音视频

Pydub GitHub: https://github.com/jiaaro/pydubpip install pydub==pydub是需要依赖== 安装 新手使用的话,可能会遇到一些问题,我写了一篇关于依赖...ffmpeg文章,可以参考一下: pythonffmpeg错误解决方法 常用一些用法 1、打开音频文件 第一种方法: from pydub import AudioSegment wav_version...) channels:声道,1--表示单声道,2--表示双声道 sample_width:取样字节数,1--表示8-bit音频,2--表示16-bit音频,4--表示32-bit音频。...,具体可以参考ffmpeg文档 tag:给编码器提供媒体信息标签,不是所有的格式都可以使用 cover:给音频文件添加封面 3、一些简单音频处理 ==pydub做任何操作时间尺度都是毫秒级=...(duration=1000) ⑧、创建一个持续时间为0AudioSegment对象 empty = AudioSegment.empty() 可以用于许多音频集合在一起循环 # 存放三个音频文件

1.5K10

NDK--利用FFmpeg进行音频解码

通过之前知识,我们能够播放一个视频文件视频流,那么如何播放音频流呢?...数字音频:在早期声音无法捕获和保存,后面人们发明了模拟信号,模拟信号数字化,我们称之为数字音频,在我们日常生活,听歌,电视声音等都是数字音频模拟信号数字化过程有3个:采样、量化和编码。...存储这段二进制数据即表示模拟信号转换为数字信号了,以后就可以对这段二 进制数据进行存储、播放、复制,或者进行其他任何操作。 但是PCM用于网络传输还是体积太大了,所以必须对其进行压缩编码。...根据不同应用场景(包括存储设备、传输网络环境、播放设备 等),可以选用不同压缩编码算法,如PCM、WAV、AAC、MP3、 Ogg等。...音频基础知识就介绍完了,下面开始实现音频解码 代码和之前也是差不多,不过之前使用是视频转码组件,现在要换成音频转码组件 #include #include #include

64920

FFmpeg进行音频解码和播放

音频编码 音频数字化主要有压缩与非压缩(pcm)两种方式。 非压缩编码(PCM)PCM音频编码 PCM通过抽样、量化、编码三个步骤连续变化模拟信号转换为数字编码。...如CD采用44.1kHz抽样频率,其他则主要采用48kHz或96kHz。 压缩编码 PCM虽然为无损压缩,但由典型音频信号表示信号特性没有达到最佳,也没有很好适应人耳听觉系统特定要求。...PCM数据量过高,从而造成存储和传输方面的障碍,因此必须使用相应技术降低数字信号源数据率,又尽可能不对节目造成损伤,这就是压缩技术 常见压缩音频格式WAVMP3。...MP3全称是MPEG-1 Audio Layer 3,它在1992年合并至MPEG规范MP3能够以高音质、低采样率对数字音频文件进行压缩。应用最普遍。...直接核心贴代码 实现功能:mp3wav等格式转成pcm // 源文件路径 const char * src_path = env->GetStringUTFChars(src_audio_path

6.2K20

音频基础知识

4、音频使用场景 在现实生活音频(audio)主要用在两大场景:语音(voice)和音乐(music)。...采样率相同,要转换成相同采样率。主流采样率包括:16kHz、32kHz、44.1kHz 和 48kHz。 帧长相同,帧长由编码格式决定,PCM 没有帧长概念,开发者自行决定帧长。...使用场景:多媒体开发中间文件、保存音乐和音效素材等。 ②、mp3 编码 MP3 具有不错压缩比,使用 LAME 编码中高码率 MP3 文件,听感上非常接近源 WAV 文件。...②、音频指纹识别 音频指纹识别的目的是从音频中提取一段特定数字摘要,用于快速识别该段音频是否来自音频样本,或从音频搜索出带有相同数字摘要音频。 ③、自动音乐标注 音乐标注是音频分类升级版。...④、音频分割 根据定义一组特征音频样本分割成段。 ⑤、音源分离 音源分离就是从一堆混合音频信号中分离出来自不同音源信号,它最常见应用之一就是识别同时翻译音频歌词(如卡拉 OK) 。

1.4K61
领券