簡體   English   中英

使用Bot Framework時,如何在Bing Speech API中使用Skype音頻附件?

[英]How can I use a Skype audio attachment with the Bing Speech API when using the Bot Framework?

我有一個使用Microsoft Bot Framework創建的機器人,它使用Skype作為渠道。 當用戶嘗試通過使用一種移動應用(Android或iOS)發送音頻與機器人對話時,我希望能夠從附件中獲取音頻並將其發送到Bing Speech API,以便將其轉換為文本。

我在執行此操作時遇到了一些問題,我認為主要問題是必須將WAV發送到Bing Speech API。 我在Bot Builder存儲庫中閱讀了該示例,該示例中包含以下代碼:

var audioAttachment = activity.Attachments?.FirstOrDefault(a => a.ContentType.Equals("audio/wav"));
if (audioAttachment != null)
{
    using (var client = new HttpClient())
    {
        var stream = await client.GetStreamAsync(audioAttachment.ContentUrl);
        var text = await this.speechService.GetTextFromAudioAsync(stream);
        message = ProcessText(activity.Text, text);
    }
}

但是,當我通過Skype移動應用程序發送音頻時(我正在與Android進行測試),我沒有“音頻/音頻”文件類型,文件類型(ContentType)只是“音頻”。

當我嘗試使用郵遞員在Bot State Manager API中獲取音頻文件時(URL看起來像這樣: https : //smba.trafficmanager.net/apis/v3/attachments/0-eus-d1-0000000000000/views/original )我得到的內容類型為“ application/octet-stream ”,但我不知道這是MP3,WAV還是其他application/octet-stream

我可以在Postman內部看到的幾行內容是這樣的:

ftypmp42isommp42pmoovlmvhd。 minf?smhd $ dinfdref url stbl[stsdKmp4a? D'esds@ww0stts - stsz

我使用ReadAsStreamAsync方法將此內容下載到Stream中,並將此字符串傳遞給以下端點上的Bing Speech API:

https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=pt-BR&format=detailed

但是,這就是我得到的:

{“ RecognitionStatus”:“ InitialSilenceTimeout”,“ Offset”:11000000,“ Duration”:0}

在這種情況下,它是語音可聽的音頻,並且不會檢測到音頻。 正如我所說,我相信問題在於文件類型。 Skype使用的文件類型是什么,如何使用此文件來調用Bing Speech API?

Skype使用的文件類型是什么,如何使用此文件來調用Bing Speech API?

沒錯,問題在於文件類型。 Bing Speech Api當前僅支持WAV / PCM格式,如果您的音頻文件不具有此格式,則需要嘗試將其轉換為PCM。

如果要檢測用戶附件是否為音頻文件,則可以例如修改代碼,如下所示:

var audioAttachment = activity.Attachments?.FirstOrDefault(a => a.ContentType.Contains("audio"));

那么,現在真正的問題是將其轉換為.wav音頻。 對於C#,您可以嘗試使用NAudio包。

可能是以下代碼段有助於將Bing轉換為wav格式。 這個答案可能對您來說太遲了,但對於將來可能會有所幫助。 我需要將mp3轉換為wav文件,以便與bing語音一起使用(將語音轉換為文本),因此我不得不編寫如下小段文字。 在這里,我們使用流將輸入從ffmpeg直接傳遞到bing(因此不需要中間文件系統)。

    const http = require('http'),
        fs = require('fs'),
        path = require('path');

    const ffmpeg = require('fluent-ffmpeg');
    const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path;
    ffmpeg.setFfmpegPath(ffmpegPath);
    const stream = require('stream');

    var bing = require('bingspeech-api-client/lib/client');
    const bingSpeechkey = '';

    var bingClient = new bing.BingSpeechClient(bingSpeechkey);

    function bingUploadFromStream() {
        const pass = new stream.PassThrough();

        console.log('Bing upload');
        bingClient.recognizeStream(pass).then(response => console.log(response.results[0].name));

        return pass;
    }


    function speechToText(input) {
        ffmpeg(input)
            .format('wav')
            .on('progress', (progress) => {
                console.log('Processing: ' + progress.targetSize + ' KB converted');
            })
            .on('error', (err) => {
                console.log('An error occurred: ' + err.message);
            })
            .on('end', () => {
                console.log('Processing finished !');
            })
            .output(bingUploadFromStream())
            .run();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM