首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将未来流对象的正文保存到磁盘

将未来流对象的正文保存到磁盘
EN

Stack Overflow用户
提问于 2021-09-26 06:53:04
回答 1查看 39关注 0票数 0

我正在使用来自rusotoPollyClient,我正在尝试处理我认为是来自方法synthesize_speech()的某种类型的Future响应。

以下是我所拥有的代码片段,它按原样编译和运行:

代码语言:javascript
复制
extern crate rusoto_core;
extern crate rusoto_polly;

use std::default::Default;
use tokio::{io};

use rusoto_core::credential::{ProfileProvider, ProvideAwsCredentials};
use rusoto_core::Region;
use rusoto_core::ByteStream;
use rusoto_polly::{PollyClient, SynthesizeSpeechInput, Polly};
use std::fs::File;
use futures::AsyncBufRead;
use std::pin::Pin;
use futures::Future;

fn main() {

    let region = Region::UsEast1;
    let polly_client = PollyClient::new(region); // using default credenetials

    let speech_input = SynthesizeSpeechInput{
        engine: Option::from(String::from("neural")),
        language_code: None,
        lexicon_names: None,
        output_format: "mp3".to_string(),
        sample_rate: None,
        speech_mark_types: None,
        text: String::from("hello world!"),
        text_type: None,
        voice_id: String::from("Amy")
    };
    let mut response = polly_client.synthesize_speech(speech_input);

    println!("Now how to we handle this respones object...");

}

我的目标是在响应中保存应该是MP3二进制数据的内容。我没有分享任何编译器错误,因为我经历了相当多不同的错误。我是Rust的新手,当我在使用非异步代码时,这是我第一次接触到它。

我是否需要将synthesize_speech()方法包装在闭包中,以便可以将其包装在某种await块中?

任何帮助或建议都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2021-09-26 14:48:18

我知道这只是一个玩具示例,但在从rusoto documentation中模仿了main()上的一些tokio async模式后,我能够让它工作:

代码语言:javascript
复制
extern crate rusoto_core;
extern crate rusoto_polly;

// use rusoto_core::credential::{ProfileProvider, ProvideAwsCredentials};
use rusoto_core::{Region};
use rusoto_polly::{PollyClient, SynthesizeSpeechInput, Polly};
use std::fs;

#[tokio::main] // https://docs.rs/tokio/0.2.2/tokio/attr.main.html
async fn main() {

    let region = Region::UsEast1;
    let polly_client = PollyClient::new(region); // using default credentials

    let speech_input = SynthesizeSpeechInput{
        engine: Option::from(String::from("neural")),
        language_code: None,
        lexicon_names: None,
        output_format: "mp3".to_string(),
        sample_rate: None,
        speech_mark_types: None,
        text: String::from("Hello world, from Rust!"),
        text_type: None,
        voice_id: String::from("Amy")
    };

    match polly_client.synthesize_speech(speech_input).await {
        Ok(output) => match output.audio_stream{
            Some(audio_stream) => {
                println!("{}", audio_stream.len());
                fs::write("mp3/rstts.mp3", audio_stream).expect("Unable to write file");
            },
            None => println!("audio stream not found"),
        },
        Err(error) => {
            println!("error: {:?}", error);
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69332506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档