audio - 在Rust中播放网址中的音频

标签 audio rust rodio

我已经使用Rodio Crate通过文档来播放本地文件中的音频,但无法弄清楚如何使用url播放音频。

最佳答案

这是一个使用阻塞reqwest的简单示例。在开始播放之前,这会将整个音频文件下载到内存中。

use std::io::{Write, Read, Cursor};
use rodio::Source;

fn main() {
    // Remember to add the "blocking" feature in the Cargo.toml for reqwest
    let resp = reqwest::blocking::get("http://websrvr90va.audiovideoweb.com/va90web25003/companions/Foundations%20of%20Rock/13.01.mp3")
        .unwrap();
    let mut cursor = Cursor::new(resp.bytes().unwrap()); // Adds Read and Seek to the bytes via Cursor
    let source = rodio::Decoder::new(cursor).unwrap(); // Decoder requires it's source to impl both Read and Seek
    let device = rodio::default_output_device().unwrap();
    rodio::play_raw(&device, source.convert_samples()); // Plays on a different thread
    loop {} // Don't exit immediately, so we can hear the audio
}
如果要实现实际的流传输,音频文件的一部分将被下载然后播放,并且在以后需要时获取更多内容,那么它将变得更加复杂。请参阅Rust Cookbook中有关部分下载的条目:https://rust-lang-nursery.github.io/rust-cookbook/web/clients/download.html#make-a-partial-download-with-http-range-headers
我相信使用async reqwest也可以更轻松地完成此操作,但我仍在自己进行尝试。

关于audio - 在Rust中播放网址中的音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63463503/

相关文章:

Android MediaPlayer - 在任何给定时间只有一个实例?

Android AudioRecord 初始化延迟

java - 如何使用小程序同时播放音频文件和显示图像?

java - 如何使用 Java 从 USB 麦克风录制声音

pointers - 参数/模式中 '&variable' 的含义

rust - 当 T 不是副本时,为什么取消引用 Box<T> 不会提示 "moving out of shared reference"?

rust - 是否可以在 Tokio 中关闭 TcpListener?