AMcoder - javascript, python, java, html, php, sql

Հնարավոր չէ պատճենել հոսքը ֆայլում

Ես պետք է ձայնային ֆայլ ստեղծեմ SpeechSynthesizer-ի կողմից ստեղծված հոսքից:

Սա այն կոդը է, որն օգտագործում եմ

var stream = await _SpeechSynth.GetSpeakStreamAsync(text, this.Language);
            var reader = new Windows.Storage.Streams.DataReader(stream.GetInputStreamAt(0));
            await reader.LoadAsync((uint)stream.Size);

            byte[] bytes = new byte[stream.Size];
            reader.ReadBytes(bytes);

             var audioFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(_AgendaAudioFilename, CreationCollisionOption.ReplaceExisting);

             using (var outputStream = await audioFile.OpenAsync(FileAccessMode.ReadWrite))
             {

                 Stream os = outputStream.GetOutputStreamAt(0).AsStreamForWrite();
                 await os.WriteAsync(bytes, 0, bytes.Length);
             }

Ես իմացա, որ խնդիրն այն էր, որ «os.WriteAsync»-ում չէր սպասվում: Երբ ես այդ տողում տեղադրեցի ընդմիջման կետ և սպասեցի մի քանի վայրկյան, ապա ֆայլը ճիշտ էր ստեղծվում: Արդյո՞ք await հիմնաբառը պետք է սպասի, մինչև բոլոր բայթերը պատճենվեն հոսքի մեջ, նախքան հաջորդ տող անցնելը:

Ես դեմ չեմ, եթե որևէ մեկը կարող է առաջարկել InMemoryRandomAccessStream-ը ֆայլում պատճենելու ավելի լավ միջոց:

ԽՄԲԱԳՐԵԼ:

Մահանթեշի պատասխանը հմայքի պես է աշխատում. Շատ շնորհակալություն. Բայց ես նոր խնդրի առաջ եմ.

Ֆայլը ստեղծելուց հետո ես փորձում եմ նորից բացել այն նվագարկելու համար, բայց ստանում եմ այս սխալը:

"Մուտքն արգելված է։ (Բացառություն HRESULT-ից՝ 0x80070005 (E_ACCESSDENIED))"

Սա իմ կոդը:

if (!cacheHit)
        {
            var stream = await _SpeechSynth.GetSpeakStreamAsync(text, this.Language);

            //write the stream to disk (seems to be buggy when attempting to playback from the result of the speech synth request)
            var audioFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(_AgendaAudioFilename, CreationCollisionOption.ReplaceExisting);

             outputStream = await audioFile.OpenAsync(FileAccessMode.ReadWrite);

             await RandomAccessStream.CopyAsync(stream, outputStream);                 

        }

        //read agenda from disk and play back the audio
        var agendaStorageFile = await ApplicationData.Current.TemporaryFolder.GetFileAsync(_AgendaAudioFilename);
        var agendaStreamFromDisk = await agendaStorageFile.OpenAsync(FileAccessMode.Read);            

        _MediaPlayer.Url = text;
        _MediaPlayer.SetBytestream(agendaStreamFromDisk);
        _MediaPlayer.Play();    

Այս տողում սխալ եմ ստանում.

var agendaStreamFromDisk = await agendaStorageFile.OpenAsync(FileAccessMode.Read);

Կա՞ պատկերացում, թե ինչ կարող է սխալ լինել:


Պատասխանները:


1

Կարծում եմ, որ դուք կարող եք փորձել դրա հետ

await RandomAccessStream.CopyAsync(inMemoryStream, outputStream);

Նոր խնդրի լուծում.

if (!cacheHit)
    {
        var stream = await _SpeechSynth.GetSpeakStreamAsync(text, this.Language);

        //write the stream to disk (seems to be buggy when attempting to playback from the result of the speech synth request)
        var audioFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(_AgendaAudioFilename, CreationCollisionOption.ReplaceExisting);

         using(outputStream = await audioFile.OpenAsync(FileAccessMode.ReadWrite)){
         await RandomAccessStream.CopyAsync(stream, outputStream);}

    }

    //read agenda from disk and play back the audio
    var agendaStorageFile = await ApplicationData.Current.TemporaryFolder.GetFileAsync(_AgendaAudioFilename);
   using (var agendaStreamFromDisk = await agendaStorageFile.OpenAsync(FileAccessMode.Read)){

    _MediaPlayer.Url = text;
    _MediaPlayer.SetBytestream(agendaStreamFromDisk);
    _MediaPlayer.Play();  }
28.12.2012
  • Շատ շնորհակալ եմ պատասխանի համար: Բայց ֆայլը բացելիս ես բախվում եմ նոր խնդրի, հենց կոդի ավելի ներքևում: Ես խմբագրել եմ հարցը, կարո՞ղ եք ասել ինձ, թե որտեղ կարող է սխալ լինել: 28.12.2012
  • Պետք է փակել ելքային հոսքը հաջորդ անգամ բացելուց առաջ (outputStream .Փակել) կամ փորձել օգտագործել բլոկներ 28.12.2012

  • 2

    Քանի որ դուք օգտագործում եք await հիմնաբառը սպասելու համար, ավելի լավ է օգտագործել մեթոդների համաժամանակյա տարբերակները, օրինակ

    using (var outputStream = audioFile.Open(FileAccessMode.ReadWrite))
    {
        Stream os = outputStream.GetOutputStreamAt(0).AsStreamForWrite();
        os.Write(bytes, 0, bytes.Length);
    }
    
    28.12.2012
  • Նույնիսկ դա չի աշխատում...չգիտեմ: Բայց երբ ես դնում եմ ընդմիջման կետ և սպասում եմ հաջորդ տողին os-ից հետո: Գրեք մի քանի վայրկյան, ապա outputstream-ը ստանում է որոշակի չափ: Իսկապես տարօրինակ է: Կա՞ պատկերացում, թե ինչ կարող է տեղի ունենալ: 28.12.2012
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..