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

如何在Rust中将16位PCM音频的采样率从24000 Hz更改为48000 Hz?

在Rust中将16位PCM音频的采样率从24000 Hz更改为48000 Hz,可以通过以下步骤实现:

  1. 首先,需要使用适当的库来处理音频文件。在Rust中,一个常用的音频处理库是hound,它提供了对PCM音频文件的读写功能。你可以在Cargo.toml文件中添加以下依赖项来使用它:
代码语言:txt
复制
[dependencies]
hound = "3.5.0"
  1. 接下来,你需要读取原始音频文件并解析其采样数据。假设你的原始音频文件名为input.wav,采样率为24000 Hz,采样位深为16位。你可以使用hound库来完成这一步骤:
代码语言:txt
复制
use hound::{WavReader, WavSpec, SampleFormat};

fn main() {
    let reader = WavReader::open("input.wav").unwrap();
    let spec = reader.spec();
    let samples: Vec<i16> = reader.into_samples::<i16>().collect::<Result<_, _>>().unwrap();
}
  1. 然后,你需要使用插值算法将采样率从24000 Hz插值到48000 Hz。一种常用的插值算法是线性插值,它可以通过对相邻采样点进行插值来增加采样率。以下是一个简单的线性插值函数的示例:
代码语言:txt
复制
fn linear_interpolation(samples: &[i16], target_sample_rate: u32) -> Vec<i16> {
    let original_sample_rate = 24000;
    let ratio = target_sample_rate as f32 / original_sample_rate as f32;
    let mut output_samples = Vec::new();

    for i in 0..samples.len() - 1 {
        let current_sample = samples[i];
        let next_sample = samples[i + 1];
        let num_interpolated_samples = (ratio.floor() as usize) - 1;

        output_samples.push(current_sample);

        for j in 0..num_interpolated_samples {
            let interpolated_sample = ((num_interpolated_samples - j) as f32 * current_sample as f32
                + (j + 1) as f32 * next_sample as f32)
                / (num_interpolated_samples + 1) as f32;

            output_samples.push(interpolated_sample.round() as i16);
        }
    }

    output_samples.push(*samples.last().unwrap());

    output_samples
}
  1. 最后,你可以使用hound库将插值后的采样数据写入新的音频文件。假设你想将插值后的音频保存为output.wav文件,采样率为48000 Hz,采样位深为16位。你可以使用以下代码完成这一步骤:
代码语言:txt
复制
use hound::{WavWriter, SampleFormat};

fn main() {
    let output_samples = linear_interpolation(&samples, 48000);

    let spec = WavSpec {
        channels: 1,
        sample_rate: 48000,
        bits_per_sample: 16,
        sample_format: SampleFormat::Int,
    };

    let mut writer = WavWriter::create("output.wav", spec).unwrap();
    for sample in output_samples {
        writer.write_sample(sample).unwrap();
    }
}

这样,你就成功将16位PCM音频的采样率从24000 Hz更改为48000 Hz,并将结果保存在output.wav文件中。

请注意,以上代码仅为示例,可能需要根据实际情况进行适当的修改和优化。另外,对于更复杂的音频处理需求,可能需要使用其他库或算法来实现。

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

相关·内容

【FFmpeg】ffmpeg 命令行参数 ⑦ ( 使用 FFmpeg 提取 PCM 音频数据 | PCM 音频格式 | 提取 PCM 音频格式常用参数 | 查询文档方法 )

只有 知道该数据 采样率 / 采样位数 / 通道数 才能将该音频数据播放出来 ; PCM 数据是 最原始音频数据 , 音频内容完全无损 , 但是 PCM 数据体积庞大 , 对 PCM 音频数据压缩...命令 , input.mp4 输入文件中 提取 PCM 音频数据 到 output.pcm 输出文件 ; -ar 48000 参数 设置 输出文件采样率48000 Hz ; -ac 2 参数...s16 output.wav 命令 , input.mp4 输入文件中 提取 PCM 音频数据 到 output.pcm 输出文件 ; -ar 48000 参数 设置 输出文件采样率48000...-ac 2 -codec:a pcm_s16le output.wav 命令 , input.mp4 输入文件中 提取 PCM 音频数据 到 output.pcm 输出文件 ; -ar 48000...参数 设置 输出文件采样率48000 Hz ; -ac 2 参数 设置 输出文件 是 双通道 立体声 ; -codec:a pcm_s16le 参数 设置 输出文件 是 16 位 小端模式 采样

71310

科普常识:常见音频参数解析

如果在计算机加上相应音频卡—就是我们经常说声卡,我们可以把所有的声音录制下来,声音声学特性高低等都可以用计算机硬盘文件方式储存下来。...在数字音频领域,常用采样率有:         8000 Hz - 电话所用采样率, 对于人说话已经足够         11025 Hz - 电话所用采样率         22050 Hz -...MPEG-1 音频(VCD,SVCD,MP3)所用采样率         47250 Hz - 商用 PCM 录音机所用采样率         48000 Hz - miniDV、数字电视、DVD、DAT...、电影和专业音频所用数字声音所用采样率         50000 Hz - 商用数字录音机所用采样率         96000 Hz或者 192000 Hz - DVD-Audio、一些 LPCM...要算一个PCM音频码率是一件很轻松事情,采样率值×采样大小值×声道数 bps。

2.5K00

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

, 单位 Hz , 采样率 决定了 音频 质量 和 频率范围 ; 常见 音频采样率 : 44100 Hz ( 44.1 kHz ) , 这是 CD 音质标准采样率 ; ffmpeg -i input.mp4...-ar 44100 output.mp3 48000 Hz ( 48 kHz ) , 这是 专业音频和视频制作 采样率 ; ffmpeg -i input.mp4 -ar 48000 output.mp3...22050 Hz ( 22.05 kHz ) 和 11025 Hz ( 11.025 kHz ) 这些 较低采样率 通常用于 语音 或 低质量音频 ; ffmpeg -i input.mp4 -ar... 音频 输出到 output.mp3 音频文件中 , 该音频 采样率为 44100Hz ; 转换前 input.mp4 视频 中 音频 采样率48000Hz ( 48.0kHz ) , 转换后...output.mp3 音频文件 采样率为 44100Hz ( 44.1kHz ) ; 四、设置音频通道数 -ac 参数 1、-ac 参数解析 在 ffmpeg 命令中 , -ac 参数 作用是 设置音频通道数

1.4K10

【Android 高性能音频】AAudio 音频流 数据回调细节 ( 数据回调函数优先级 | 数据回调函数 | 采样率 | 采样数 | 缓冲区调整 | 线程不安全 )

普通线程操作 : 普通线程中读写 AAudio 音频 音频数据 , 普通线程优先级比较低 , 容易被抢占 , 或者遇到资源抖动 , 对需要连续性能音频流操作造成干扰 , 出现卡顿 电流 等情况...数据回调函数基本工作流程 : 【Android 高性能音频】AAudio 音频PCM 采样 采样 缓冲 播放 连续机制 ( 数据回调机制 | 数据回调函数指针 | 实现数据回调函数 | 设置数据回调函数..., myCallback, myUserData); 数据回调函数基本工作流程 : 【Android 高性能音频】AAudio 音频PCM 采样 采样 缓冲 播放 连续机制 ( 数据回调机制...采样率 : 每秒钟采样个数 , 单位是 赫兹 ( Hz ) , 一般是 44100 Hz , 或 48000 Hz ; 在 Android 手机中 , 一般是 48000 Hz , 即每秒需要处理...音频设备采样率一般是 48000 Hz , 需要将准备读写缓冲区音频样本数据采样率转为 48000Hz 后才能向 AAudio 音频流中读写 ; IV .

99610

音视频八股文(3)--ffmpeg常见命令(2)

数据 播放 PCM 数据文件 48000_2_f32le.pcm,指定采样率48000 Hz,声道数为 2,格式为 32 位浮点型: ffplay -ar 48000 -ac 2 -f f32le...提取PCM数据 音频文件 buweishui.mp3 中提取 PCM 格式音频数据,采样率48000 Hz,声道数为 2,采样格式为 signed 16-bit little-endian,并输出为文件...-ac 2 -codec:a pcm_s16le out2_s16le.wav 音频文件 buweishui.mp3 中提取 PCM 格式音频数据,采样率48000 Hz,声道数为 2,采样格式为...-acodec pcm_f32le 48000_2_f32le.pcm 视频文件 test.mp4 中提取前 10 秒音频数据,采样率48000 Hz,声道数为 2,采样格式为 float...修改音频采样率: 将视频文件 test.mp4 中音频采样率改为 44100Hz,并重新编码音频数据保存为 MP4 文件 output_44100hz.mp4: ffmpeg -i test.mp4

963121

【计算机网络】物理层 : 编码 ( 模拟信号 编码为 数字信号 | 音频信号 PCM 编码 | 抽样 | 量化 | 编码 | 采样定理 )

离散序列 ; 二、 音频信号 PCM 编码 ---- 模拟数据 编码为 数字信号 , 最典型应用 , 就是将 模拟 音频信号 进行 脉码调制 ( PCM ) 编码 , 转为 数字信号 ; PCM...音频数据 , 就是 高保真 音频 , 没有经过压缩原始音频数据 ; 其被存储于 WAV 格式音频中 ; MP3 , OGG 等格式都是被压缩过 ; PCM 编码过程主要有三个步骤 : ① 抽象 ②...log_2 65536 = 16 比特来表示 , 对应着 16 位音频采样 ; : 音频格式是 44100 Hz , 单声道 , 16 位采样 , 就意味着 , 每个采样取值有 65536...; 也可以采更多样本 , 采样频率越高 , 正弦波形恢复准确 , 就越不容易失真 ; : 音频采样 44100Hz , 48000 Hz , 96000 Hz , 都非常大...; 人耳能听到声音是 20Hz ~ 20000Hz , 如果让人耳能够听不出来区别 , 必须在 20000 \times 2 = 40000 Hz 以上采样率才能达到最基本 高保真 要求

1.1K00

音视频八股文(3)--ffmpeg常见命令(2)

数据 * 播放 PCM 数据文件 `48000_2_f32le.pcm`,指定采样率48000 Hz,声道数为 2,格式为 32 位浮点型: ``` ffplay -ar 48000 -ac 2 -...提取PCM数据 * 音频文件 `buweishui.mp3` 中提取 PCM 格式音频数据,采样率48000 Hz,声道数为 2,采样格式为 signed 16-bit little-endian...PCM 格式音频数据,采样率48000 Hz,声道数为 2,采样格式为 float 32-bit little-endian,并输出为文件 `48000_2_f32le.pcm`: ``` ffmpeg...` 中提取前 10 秒音频数据,采样率48000 Hz,声道数为 2,采样格式为 float 32-bit little-endian,并输出为文件 `48000_2_f32le_2.pcm`:...修改音频采样率: * 将视频文件 `test.mp4` 中音频采样率改为 44100Hz,并重新编码音频数据保存为 MP4 文件 `output_44100hz.mp4`: ``` ffmpeg

1.8K10

Linux下使用alsa-lib库完成音频开发: 实现放音和录音(声卡获取PCM数据保存、向声卡写PCM数据输出)

_LE #define AUDIO_CHANNEL_SET 1 //1单声道 2立体声 #define AUDIO_RATE_SET 44100 //音频采样率,常用采样频率:...44100Hz 、16000HZ、8000HZ48000HZ、22050HZ FILE *pcm_data_file=NULL; int run_flag=0; void exit_sighandler.../* 进行音频采集,读取存放pcm数据文件通过声卡进行播放 音频参数: 声道数: 1 采样位数: 16bit、LE格式 采样频率: 44100Hz 运行示例: $ gcc linux_pcm_save.c..._LE #define AUDIO_CHANNEL_SET 1 //1单声道 2立体声 #define AUDIO_RATE_SET 44100 //音频采样率,常用采样频率:...44100Hz 、16000HZ、8000HZ48000HZ、22050HZ FILE *pcm_data_file=NULL; int run_flag=0; void exit_sighandler

7.1K20

Android FFmpeg系列02--音视频基础

解封装:封装逆过程,将音视频文件分离为音频、视频等码流过程,比如将MP4解封装为H.264和AAC 编码/解码 编码:将原始视频数据(RGB、YUV等)压缩为视频码流,音频数据(PCM等)压缩为音频码流过程叫做编码...Android平台,碎片化严重,MediaCodec坑也是不少 视频帧率 视频一秒显示帧数 音频采样率 即取样频率,指录音设备在单位时间内对模拟信号采样多少采样率越高,声音质量越好,还原越真实...目前主流采集卡上,采样频率一般共分为11025Hz、22050Hz24000Hz、44100Hz48000Hz五个等级 不过人耳分辨能力有限,太高频率也区分不出来。...在音频流中播放速度按照音频采样率进行,视频流中播放速度按照帧率进行 理想情况下音视频独立播放是同步,但实际上如果不做音视频同步处理,基本上都会出现音画不同步问题,造成原因主要还是一帧播放时间很难控制在理想情况...,音视频每帧解码和渲染耗时不同,可能造成每帧都存在一定误差且误差会逐渐积累 音视频同步三种方式:视频参考音频时钟、音频/视频参考外部时钟、音频参考视频时钟,常用是前两种,详细内容后面更新到FFmpeg

94510

直播软件系统开发,播放端配合服务端优化,做到精确调度

音频采样率是指录音设备在一秒钟内对声音信号采样次数,采样频率越高声音还原就越真实越自然。...在当今主流采集卡上,采样频率一般共分为11025Hz、22050Hz24000Hz、44100Hz48000Hz五个等级,11025Hz能达到AM调幅广播声音品质,而22050Hz24000HZ...能达到FM调频广播声音品质,44100Hz则是理论上CD音质界限,48000Hz则更加精确一些。...技术层面来说,要满足这些要求,意味着更高开发难度,在播放端如何做到秒开,直播过程中保证画面和声音清晰度相同,稳定、流畅、无花屏等,这些都需要播放端配合服务端做好优化,做到精确调度。...直播软件系统开发中,播放端是直播内容重要生产环节,负责产出直播内容,直播视频画面和音频并不能直接作为传输内容进行传递,需要经过一系列解码、编码、前处理后才能推流到CDN进行分发。

25010

嵌入式Linux下音频开发: alsa-lib实现声音数据捕获保存与播放

: 44100Hz 、16000HZ、8000HZ48000HZ、22050HZ snd_pcm_t *capture_handle;// 一个指向PCM设备句柄 snd_pcm_hw_params_t...44100Hz 、16000HZ、8000HZ48000HZ、22050HZ FILE *pcm_data_file=NULL; int run_flag=0; void exit_sighandler...采样率设置成功 声道数设置成功. 参数设置成功. 音频接口准备好. 缓冲区分配成功. 开始采集数据... (3). 播放采集声音: 使用windows下audacity.exe 软件。...) /* 进行音频采集,读取存放pcm数据文件通过声卡进行播放 音频参数: 声道数: 2 采样位数: 16bit、LE格式 采样频率: 44100Hz 运行示例: $ gcc...44100Hz 、16000HZ、8000HZ48000HZ、22050HZ FILE *pcm_data_file=NULL; int run_flag=0; void exit_sighandler

5.4K30

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

1.1.1 脉冲编码调制(PCMPCM是最常见未压缩音频编码方式。它直接对模拟信号进行采样、量化和编码,将声音波形转换为数字信号。...高采样率能够准确地表示原始信号,但也会产生更多数据。量化:将每个采样点幅值转换为最接近离散值,通常使用16位或24位表示。...:采样率(Sample Rate)采样率是指每秒钟对连续模拟音频信号进行采样次数,单位是赫兹(Hz)。...常见值8000 Hz:电话音频质量16000 Hz:宽带电话22050 Hz:广播质量44100 Hz:CD音质48000 Hz:专业音频和视频96000 Hz:高分辨率音频采样率决定了音频信号频率范围和保真度...f 是频率,表示波每秒钟振荡次数,单位是赫兹(Hz)。t 是时间点。ϕ 是初始相位。正弦波是最简单声音信号,用于模拟纯音(音乐中音符)。

23573

【多媒体封装格式详解】--- AAC ADTS格式分析

记得第一次做demux时候,把AAC音频ES流FLV封装格式中抽出来送给硬件解码器时,不能播;保存到本地用pc播放器播时,我靠也不能播。当时崩溃了,后来通过查找资料才知道。...2.ADTS内容及结构 ADTS 头中相对有用信息 采样率、声道数、帧长度。想想也是,我要是解码器的话,你给我一堆得AAC音频ES流我也解不出来。...There are 13 supported frequencies: 0: 96000 Hz 1: 88200 Hz 2: 64000 Hz 3: 48000 Hz 4: 44100 Hz 5: 32000...Hz 6: 24000 Hz 7: 22050 Hz 8: 16000 Hz 9: 12000 Hz 10: 11025 Hz 11: 8000 Hz 12: 7350 Hz 13: Reserved...我们只需得到封装格式里面关于音频采样率、声道数、元数据长度、aac格式类型等信息。然后在每个AAC原始流前面加上个ADTS头就OK了。

1.9K10

2023-03-17:使用Go语言和FFmpeg库实现音频重采样解码,并将其保存为PCM格式文件。

2023-03-17:使用Go语言和FFmpeg库实现音频重采样解码,并将其保存为PCM格式文件。答案2023-03-17:在音视频处理领域,常常需要对音频进行重采样和解码,以便于后续处理和分析。...本文将介绍如何使用Go语言及FFmpeg库实现音频重采样解码为PCM数据过程。...1.前置知识和背景介绍在介绍音频重采样解码之前,我们需要了解几个基本概念:音频采样率:指音频信号每秒钟采样次数,通常用赫兹(Hz)表示。常见采样率有44100Hz48000Hz等。...音频重采样:指改变音频采样率过程,也可以理解为对音频做插值运算,使得原来采样率与目标采样率不一致音频能够适配到目标采样率上。音频解码:指把已经编码压缩音频文件解码成原始音频数据流过程。...2.9.编写PCM数据到文件中将重采样后PCM数据写入输出文件中。outFile, err := os.Create(outFileName)if err !

1.6K00

【Recorder.js+百度语音识别】全栈方案技术细节

你或许已经发现了这个【回调地狱】现象,深度嵌套会让逻辑变复杂且代码高度耦合,想把一些方法react中剥离出去非常困难,我们希望使用一些其他方式来转换代码控制权,而不是把一大堆后续逻辑传进exportData...Recorder.js功能扩展 百度AI语音识别接口接收语音文件需要满足如下要求: pcm格式或wav格式文件二进制数据经过base64转换后编码 16000Hz采样率 16bit位深 单声道...({ numChannels:1//单声道 }) 再来看16000采样率这个条件,查看源码可以知道,源码中对于sampleRate使用,一律使用了音频流数据源上下文sampleRate,也就是对应着电脑声卡采样率...(48000Hz或44100Hz),那如何得到16000Hz采样率数据呢?...比如一个48000Hz采样率声卡采集信号点,1秒采集了48000次,那么这48000个数据要变成16000个数据,最简单办法就是每4个点取1个然后组成新数据,也就是说实际上声音采集设备传过来采样率是固定

2.3K30

【音视频原理】音频编解码原理 ③ ( 音频 比特率 码率 | 音频 帧 帧长 | 音频 帧 采样排列方式 - 交错模式 和 非交错模式 )

质量 标准 ; 原始 PCM 采样音频 , 其 比特率 = 采样频率 * 采样位数 * 音频通道数 ; 2、音频 比特率 案例 : 采样频率为 44100 Hz , 采样位数是 16 位 (..., 就是 " 未压缩比特率 = 采样频率 * 采样位数 * 音频通道数 " ; 4、音频 码率相关因素 音频码率大小 相关 因素 : 音频大小 : 采样率 位深度 声道数 编码算法 通常情况下..., 较高码率 通常会提供更好音质 , 因为它包含更多音频数据 , 能够准确地还原原始声音信号 , 但会占用更多存储空间 ; 较低码率 可以减小文件大小 , 节省存储空间 , 但可能会导致音质损失... 数据流量 , 单位一般是 Mbps , 这是数据传输速率一种单位 ; Mbps 表示单位时间内传送比特数目 , 通常用于衡量数字信号传输速率 , : 视频 / 音频 等多媒体数据传输速率...( 单位 : 个 ) / 采样频率 ( 单位 : 赫兹 Hz ) ; 音频 帧长度 也可以 指 " 压缩后每个 音频 数据长度 " ; 以 mp3 压缩格式为例 , 采样率48000Hz ,

65010

声音表示(3):作为音视频开发,你真的了解声音吗?丨音视频基础

发声角度来看,人类发出声音信号频率绝大部分在 5k Hz 以内,因此以 10k Hz 频率来采样就足够了。...听声角度来看,人类听觉范围是 20~20k Hz音频,那么数字音频采样率需要在 40k Hz 以上。...CD 音频使用 44100 Hz 采样率,部分原因也在于此,至于为什么具体是 44100 这个数字,这个是历史原因:最早数字录音由一台录像机加上一部 PCM 编码器制作,由于当时使用是 PAL...Hz:商用 PCM 录音机所用采样率; 48,000 Hz:miniDV、数字电视、DVD、DAT、电影和专业音频所用数字声音所用采样率; 50,000 Hz:商用数字录音机所用采样率; 96,000...5.1 声道:包含一个正面声道、左前方声道、右前方声道、左环绕声道、右环绕声道,以及一个用来重放 120 Hz 以下超低频声道。最早应用于早期电影院,杜比 AC-3。

93610

音视频编码相关名词详解

是指每秒钟刷新图片帧数,也可以理解为图形处理器每秒钟能够刷新几次。越高帧速率可以得到流畅、逼真的动画。每秒钟帧数(FPS)越多,所显示动作就会越流畅。...音频 PCM PCM(Pulse Code Modulation)也被称为 脉码编码调制。...样本大小 数据格式 最小值 最大值 8位PCM unsigned int 0 225 16位PCM int -32767 32767 音频文件格式 专指存放音频数据文件格式。...存在多种不同格式 采样率,分辨率和声道数目(例如立体声为2声道)是音频文件格式关键参数。...所以 22050 采样频率是常用, 44100已是CD音质, 超过48000采样对人耳已经没有意义。这和电影每秒 24 帧图片道理差不多。

1.5K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券