如何知道在NAudio中完全读取缓冲区

时间:2017-08-08 08:37:46

标签: naudio

我正在使用NAudio在C#中编写软件并使用BufferedWaveProvider

进行编码
var bufferedWaveProvider = new BufferedWaveProvider(new WaveFormat(16000, 16, 2));
// AddSamples here
WaveOut wavPlayer = new WaveOut();
wavPlayer.Init(bufferedWaveProvider);
wavPlayer.Play();

我怎么知道缓冲区已完全读取,或者现在确切位置。 由于已经调用了wavPlayer.Play(),我如何获得当前位置。 谢谢。

1 个答案:

答案 0 :(得分:0)

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean Dim bDimen As Byte, i As Long On Error Resume Next If IsError(UBound(arr, 2)) Then bDimen = 1 Else bDimen = 2 On Error GoTo 0 Select Case bDimen Case 1 On Error Resume Next IsInArray = Application.Match(stringToBeFound, arr, 0) On Error GoTo 0 Case 2 For i = 1 To UBound(arr, 2) On Error Resume Next IsInArray = Application.Match(stringToBeFound, Application.index(arr, , i), 0) On Error GoTo 0 If IsInArray = True Then Exit For Next End Select End Function Sub Part_Separator() Dim Source As Worksheet Set Source = Sheets("Part Tracking Scorecard") Dim ref1(), ref2() As Variant Dim row, index, lastrow, lastcolumn As Integer row = 92 lastrow = 866 lastcolumn = 84 ref1 = Source.Range(Source.Cells(row, 1), Source.Cells(lastrow, lastcolumn)) ReDim ref2(UBound(ref1, 1), UBound(ref1, 2)) For index = 0 To (lastrow - row) If IsInArray(ref1(index, 6).Value, ref2) Then index = index + 1 Else ref2(index) = ref1(index) 'copy the entire row from source to ref2 index = index + 1 End If Next index Dim NewFile As Worksheet Set NewFile = Sheets("Unique Parts") Dim ref2dimension_x, ref2dimension_y As Integer 'find dimensions of ref2 array ref2dimension_x = UBound(ref2, 1) - LBound(ref2, 1) + 1 ref2dimension_y = UBound(ref2, 2) - LBound(ref2, 2) + 1 For index = 2 To ref2dimension_x 'go through entire new sheet and set values For index2 = 1 To ref2dimension_y NewFile.Cells(index, index2).Value = ref2(index - 1, index2) Next index2 Next index Erase ref1() Erase ref2() 'free up the space occupied by these arrays End Sub 接口可以用来告诉你IWavePosition到目前为止播放了多少音频(以字节为单位) - 只需拨打WaveOut

对于GetPosition(),如果您设置BufferedWaveProvider,则当您到达缓冲音频结束时,播放将自动停止。您还可以检查ReadFully=false属性以查看排队等待播放的音频数量