UWP流到浮点数组c#

Posted

技术标签:

【中文标题】UWP流到浮点数组c#【英文标题】:UWP stream to float array c# 【发布时间】:2017-04-04 21:36:05 【问题描述】:

我在将 RandomAccessStream 转换为浮点数组时遇到问题。浮点数组包含 NaN 值。我不知道它们是来自流、字节数组还是浮点数组。性能和质量在这方面很重要,如果有更好的方法,请告诉我。

最后数我得到了 122 个 NaN。

谢谢

 private async void button_Click(object sender, RoutedEventArgs e)
    
        string text = "this is text";

        SpeechSynthesizer synthesizer = new SpeechSynthesizer();
        SpeechSynthesisStream synthesisStream = await synthesizer.SynthesizeTextToStreamAsync(text);

        Stopwatch watch = new Stopwatch();
        watch.Start();
        ProcessStream(synthesisStream.CloneStream());
        watch.Stop();

        // Performance is important
        Debug.WriteLine(watch.Elapsed);
    

    private async void ProcessStream(IRandomAccessStream stream)
    
        // Create a buffer (somewhere to put the stream)
        byte[] bytes = new byte[stream.Size];

        // Add stream data to buffer (Following or After that) same result
        // IBuffer x = await stream.ReadAsync(bytes.AsBuffer(), (uint)stream.Size, InputStreamOptions.None);
        using (DataReader reader = new DataReader(stream))
        
            await reader.LoadAsync((uint)stream.Size);
            reader.ReadBytes(bytes);
        

        // Change buffer(in bytes) to a float array
        float[] floatArray = MainPage.ConvertByteToFloat(bytes.ToArray());

        int nanCount = 0;
        for (var index = 0; index < floatArray.Length; index++)
        
            float value = floatArray[index];
            if (float.IsNaN(value))
            
                nanCount++;
            
        

        Debug.WriteLine("Nan count: " + nanCount);
    

    public static float[] ConvertByteToFloat(byte[] array)
    
        float[] floatArr = new float[array.Length / 4];
        for (int i = 0; i < floatArr.Length; i++)
        
            if (BitConverter.IsLittleEndian)
            
                Array.Reverse(array, i * 4, 4);
            
            floatArr[i] = BitConverter.ToSingle(array, i * 4);
        
        return floatArr;
    

【问题讨论】:

尝试private async Task ProcessStream(...) 并在点击处理程序中等待它await ProcessStream(synthesisStream); 我只是想知道CloneStream() 在发送到fire-&-forget 方法时会出现问题。 【参考方案1】:

找到答案At this SO post

基本上我不知道 32 位 wav 格式以 16 位格式存储其数据。

【讨论】:

以上是关于UWP流到浮点数组c#的主要内容,如果未能解决你的问题,请参考以下文章

字节数组byte[]和整型,浮点型数据的转换——Java代码

在 C# 中“转换”浮点数为双精度值

python中的16位浮点共享内存数组

C# - 将浮点数转换为整数...并根据余数更改整数

如何正确地将浮点指针从 C 库传递到其 C# 包装器

汇编中浮点数的总和数组