AudioTrack.Write 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
Write(ByteBuffer, Int32, WriteMode) |
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。 |
Write(Byte[], Int32, Int32) |
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。 |
Write(Int16[], Int32, Int32) |
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。 |
Write(ByteBuffer, Int32, WriteMode, Int64) |
將音訊數據寫入音訊接收,以在HW_AV_SYNC曲目上以串流模式播放。 |
Write(Byte[], Int32, Int32, WriteMode) |
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。 |
Write(Int16[], Int32, Int32, WriteMode) |
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。 |
Write(Single[], Int32, Int32, WriteMode) |
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。 |
Write(ByteBuffer, Int32, WriteMode)
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。
[Android.Runtime.Register("write", "(Ljava/nio/ByteBuffer;II)I", "GetWrite_Ljava_nio_ByteBuffer_IIHandler")]
public virtual int Write (Java.Nio.ByteBuffer audioData, int sizeInBytes, Android.Media.WriteMode writeMode);
[<Android.Runtime.Register("write", "(Ljava/nio/ByteBuffer;II)I", "GetWrite_Ljava_nio_ByteBuffer_IIHandler")>]
abstract member Write : Java.Nio.ByteBuffer * int * Android.Media.WriteMode -> int
override this.Write : Java.Nio.ByteBuffer * int * Android.Media.WriteMode -> int
參數
- audioData
- ByteBuffer
緩衝區,保留要寫入的數據,從 所 audioData.position()
報告的位置開始。
<BR>請注意,傳回時,緩衝區位置 (audioData.position()
) 會進階以反映成功寫入 AudioTrack 的數據量。
- sizeInBytes
- Int32
要寫入的位元組數目。 建議不要強制要求的位元組數目是框架大小的倍數(以位元組為單位的樣本大小乘以通道計數)。
<BR>請注意,這可能與 audioData.remaining()
不同,但不能超過它。
- writeMode
- WriteMode
的其中#WRITE_BLOCKING
一個 #WRITE_NON_BLOCKING
它在靜態模式中沒有作用。
<BR>With #WRITE_BLOCKING
,寫入將會封鎖,直到所有數據都寫入音訊接收為止。
<BR>With , #WRITE_NON_BLOCKING
寫入會在盡可能多的音訊數據佇列之後立即傳回,而不會封鎖。
傳回
零或寫入的位元組正數,或下列其中一個錯誤碼。
<如果曲目未正確初始化</li li#ERROR_BAD_VALUE
>,如果參數無法解析為有效的數據和索引</li li#ERROR_DEAD_OBJECT
<>>,則為 ul><li<>,如果 AudioTrack 不再有效且需要重新建立。>#ERROR_INVALID_OPERATION
如果成功傳輸某些數據,則不會傳回無效的物件錯誤碼。 在此情況下,錯誤會在下一個 write()</li li 傳#ERROR
>回,以防其他錯誤</li<>></ul>
- 屬性
備註
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。 ByteBuffer 中的 audioData 應該符合 AudioTrack 建構函式中指定的格式。
在串流模式中,封鎖行為取決於寫入模式。 如果寫入模式為 #WRITE_BLOCKING
,則寫入通常會封鎖,直到所有數據都加入佇列播放為止,而且會傳回完整傳輸計數。 不過,如果寫入模式為 #WRITE_NON_BLOCKING
,或追蹤在輸入時停止或暫停,或呼叫停止或暫停來中斷寫入的另一個線程,或在寫入期間發生 I/O 錯誤,則寫入可能會傳回簡短的傳輸計數。
在靜態緩衝區模式中,將數據複製到從位移0開始的緩衝區,並忽略寫入模式。 請注意,此數據的實際播放可能會在此函式傳回之後發生。
的 android.media.AudioTrack.write(java.nio.ByteBuffer, int, int)
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
適用於
Write(Byte[], Int32, Int32)
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。
[Android.Runtime.Register("write", "([BII)I", "GetWrite_arrayBIIHandler")]
public virtual int Write (byte[] audioData, int offsetInBytes, int sizeInBytes);
[<Android.Runtime.Register("write", "([BII)I", "GetWrite_arrayBIIHandler")>]
abstract member Write : byte[] * int * int -> int
override this.Write : byte[] * int * int -> int
參數
- audioData
- Byte[]
保存要播放之數據的陣列。
- offsetInBytes
- Int32
在要寫入之數據的 audioData 中以位元組表示的位移。 不得為負數,或導致數據存取超出數位界限。
- sizeInBytes
- Int32
位移之後要寫入 audioData 的位元元組數目。 不得為負數,或導致數據存取超出數位界限。
傳回
零或寫入的位元組正數,或下列其中一個錯誤碼。 位元組數目會是位元組數的倍數,以位元組為單位不要超過sizeInBytes。
<如果曲目未正確初始化</li li#ERROR_BAD_VALUE
>,如果參數無法解析為有效的數據和索引</li li#ERROR_DEAD_OBJECT
<>>,則為 ul><li<>,如果 AudioTrack 不再有效且需要重新建立。>#ERROR_INVALID_OPERATION
如果成功傳輸某些數據,則不會傳回無效的物件錯誤碼。 在此情況下,錯誤會在下一個 write()</li li 傳#ERROR
>回,以防其他 error</li><></ul> 這相當於 #write(byte[], int, int, int)
writeMode
設定為 。#WRITE_BLOCKING
- 屬性
備註
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。 AudioTrack 建構函式中指定的格式應該 AudioFormat#ENCODING_PCM_8BIT
對應至陣列中的數據。 格式可以是 AudioFormat#ENCODING_PCM_16BIT
,但這已被取代。
在串流模式中,寫入通常會封鎖,直到所有數據都加入佇列以供播放,並傳回完整傳輸計數。 不過,如果追蹤在輸入時停止或暫停,或另一個線程呼叫停止或暫停來中斷寫入,或在寫入期間發生 I/O 錯誤,則寫入可能會傳回簡短的傳輸計數。
在靜態緩衝區模式中,將數據複製到從位移0開始的緩衝區。 請注意,此數據的實際播放可能會在此函式傳回之後發生。
的 android.media.AudioTrack.write(byte[], int, int)
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
適用於
Write(Int16[], Int32, Int32)
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。
[Android.Runtime.Register("write", "([SII)I", "GetWrite_arraySIIHandler")]
public virtual int Write (short[] audioData, int offsetInShorts, int sizeInShorts);
[<Android.Runtime.Register("write", "([SII)I", "GetWrite_arraySIIHandler")>]
abstract member Write : int16[] * int * int -> int
override this.Write : int16[] * int * int -> int
參數
- audioData
- Int16[]
保存要播放之數據的陣列。
- offsetInShorts
- Int32
在 audioData 中以短字元表示的位移,其中要播放的數據開始。 不得為負數,或導致數據存取超出數位界限。
- sizeInShorts
- Int32
位移之後要以 audioData 讀取的短褲數目。 不得為負數,或導致數據存取超出數位界限。
傳回
零或寫入的短褲正數,或下列其中一個錯誤碼。 短褲數目將是通道計數的倍數,不會超過 sizeInShorts。
<如果曲目未正確初始化</li li#ERROR_BAD_VALUE
>,如果參數無法解析為有效的數據和索引</li li#ERROR_DEAD_OBJECT
<>>,則為 ul><li<>,如果 AudioTrack 不再有效且需要重新建立。>#ERROR_INVALID_OPERATION
如果成功傳輸某些數據,則不會傳回無效的物件錯誤碼。 在此情況下,錯誤會在下一個 write()</li li 傳#ERROR
>回,以防其他 error</li><></ul> 這相當於 #write(short[], int, int, int)
writeMode
設定為 。#WRITE_BLOCKING
- 屬性
備註
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。 AudioTrack 建構函式中指定的格式應該 AudioFormat#ENCODING_PCM_16BIT
對應至陣列中的數據。
在串流模式中,寫入通常會封鎖,直到所有數據都加入佇列以供播放,並傳回完整傳輸計數。 不過,如果追蹤在輸入時停止或暫停,或另一個線程呼叫停止或暫停來中斷寫入,或在寫入期間發生 I/O 錯誤,則寫入可能會傳回簡短的傳輸計數。
在靜態緩衝區模式中,將數據複製到從位移0開始的緩衝區。 請注意,此數據的實際播放可能會在此函式傳回之後發生。
的 android.media.AudioTrack.write(short[], int, int)
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
適用於
Write(ByteBuffer, Int32, WriteMode, Int64)
將音訊數據寫入音訊接收,以在HW_AV_SYNC曲目上以串流模式播放。
[Android.Runtime.Register("write", "(Ljava/nio/ByteBuffer;IIJ)I", "GetWrite_Ljava_nio_ByteBuffer_IIJHandler", ApiSince=23)]
public virtual int Write (Java.Nio.ByteBuffer audioData, int sizeInBytes, Android.Media.WriteMode writeMode, long timestamp);
[<Android.Runtime.Register("write", "(Ljava/nio/ByteBuffer;IIJ)I", "GetWrite_Ljava_nio_ByteBuffer_IIJHandler", ApiSince=23)>]
abstract member Write : Java.Nio.ByteBuffer * int * Android.Media.WriteMode * int64 -> int
override this.Write : Java.Nio.ByteBuffer * int * Android.Media.WriteMode * int64 -> int
參數
- audioData
- ByteBuffer
緩衝區,保留要寫入的數據,從 所 audioData.position()
報告的位置開始。
<BR>請注意,傳回時,緩衝區位置 (audioData.position()
) 會進階以反映成功寫入 AudioTrack 的數據量。
- sizeInBytes
- Int32
要寫入的位元組數目。 建議不要強制要求的位元組數目是框架大小的倍數(以位元組為單位的樣本大小乘以通道計數)。
<BR>請注意,這可能與 audioData.remaining()
不同,但不能超過它。
- writeMode
- WriteMode
的其中#WRITE_BLOCKING
一個 #WRITE_NON_BLOCKING
<BR>With #WRITE_BLOCKING
,寫入將會封鎖,直到所有數據都寫入音訊接收為止。
<BR>With , #WRITE_NON_BLOCKING
寫入會在盡可能多的音訊數據佇列之後立即傳回,而不會封鎖。
- timestamp
- Int64
時間戳,以 nanoseconds 表示所提供 audioData 中第一個可譯碼的音訊畫面。
傳回
零或寫入的位元組正數,或下列其中一個錯誤碼。
<如果曲目未正確初始化</li li#ERROR_BAD_VALUE
>,如果參數無法解析為有效的數據和索引</li li#ERROR_DEAD_OBJECT
<>>,則為 ul><li<>,如果 AudioTrack 不再有效且需要重新建立。>#ERROR_INVALID_OPERATION
如果成功傳輸某些數據,則不會傳回無效的物件錯誤碼。 在此情況下,錯誤會在下一個 write()</li li 傳#ERROR
>回,以防其他錯誤</li<>></ul>
- 屬性
備註
將音訊數據寫入音訊接收,以在HW_AV_SYNC曲目上以串流模式播放。封鎖行為將取決於寫入模式。
的 android.media.AudioTrack.write(java.nio.ByteBuffer, int, int, long)
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
適用於
Write(Byte[], Int32, Int32, WriteMode)
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。
[Android.Runtime.Register("write", "([BIII)I", "GetWrite_arrayBIIIHandler", ApiSince=23)]
public virtual int Write (byte[] audioData, int offsetInBytes, int sizeInBytes, Android.Media.WriteMode writeMode);
[<Android.Runtime.Register("write", "([BIII)I", "GetWrite_arrayBIIIHandler", ApiSince=23)>]
abstract member Write : byte[] * int * int * Android.Media.WriteMode -> int
override this.Write : byte[] * int * int * Android.Media.WriteMode -> int
參數
- audioData
- Byte[]
保存要播放之數據的陣列。
- offsetInBytes
- Int32
在要寫入之數據的 audioData 中以位元組表示的位移。 不得為負數,或導致數據存取超出數位界限。
- sizeInBytes
- Int32
位移之後要寫入 audioData 的位元元組數目。 不得為負數,或導致數據存取超出數位界限。
- writeMode
- WriteMode
的其中#WRITE_BLOCKING
一個 #WRITE_NON_BLOCKING
它在靜態模式中沒有作用。
<br>With #WRITE_BLOCKING
,寫入將會封鎖,直到所有數據都寫入音訊接收為止。
<br>With #WRITE_NON_BLOCKING
,寫入會在盡可能多的音訊數據佇列后立即傳回,而不會封鎖。
傳回
零或寫入的位元組正數,或下列其中一個錯誤碼。 位元組數目會是位元組數的倍數,以位元組為單位不要超過sizeInBytes。
<如果曲目未正確初始化</li li#ERROR_BAD_VALUE
>,如果參數無法解析為有效的數據和索引</li li#ERROR_DEAD_OBJECT
<>>,則為 ul><li<>,如果 AudioTrack 不再有效且需要重新建立。>#ERROR_INVALID_OPERATION
如果成功傳輸某些數據,則不會傳回無效的物件錯誤碼。 在此情況下,錯誤會在下一個 write()</li li 傳#ERROR
>回,以防其他錯誤</li<>></ul>
- 屬性
備註
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。 AudioTrack 建構函式中指定的格式應該 AudioFormat#ENCODING_PCM_8BIT
對應至陣列中的數據。 格式可以是 AudioFormat#ENCODING_PCM_16BIT
,但這已被取代。
在串流模式中,封鎖行為取決於寫入模式。 如果寫入模式為 #WRITE_BLOCKING
,則寫入通常會封鎖,直到所有數據都加入佇列播放為止,而且會傳回完整傳輸計數。 不過,如果寫入模式為 #WRITE_NON_BLOCKING
,或追蹤在輸入時停止或暫停,或呼叫停止或暫停來中斷寫入的另一個線程,或在寫入期間發生 I/O 錯誤,則寫入可能會傳回簡短的傳輸計數。
在靜態緩衝區模式中,將數據複製到從位移0開始的緩衝區,並忽略寫入模式。 請注意,此數據的實際播放可能會在此函式傳回之後發生。
的 android.media.AudioTrack.write(byte[], int, int, int)
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
適用於
Write(Int16[], Int32, Int32, WriteMode)
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。
[Android.Runtime.Register("write", "([SIII)I", "GetWrite_arraySIIIHandler", ApiSince=23)]
public virtual int Write (short[] audioData, int offsetInShorts, int sizeInShorts, Android.Media.WriteMode writeMode);
[<Android.Runtime.Register("write", "([SIII)I", "GetWrite_arraySIIIHandler", ApiSince=23)>]
abstract member Write : int16[] * int * int * Android.Media.WriteMode -> int
override this.Write : int16[] * int * int * Android.Media.WriteMode -> int
參數
- audioData
- Int16[]
保存要寫入之數據的陣列。
- offsetInShorts
- Int32
在要寫入之數據的 audioData 中以短字元表示的位移。 不得為負數,或導致數據存取超出數位界限。
- sizeInShorts
- Int32
位移之後要以 audioData 讀取的短褲數目。 不得為負數,或導致數據存取超出數位界限。
- writeMode
- WriteMode
的其中#WRITE_BLOCKING
一個 #WRITE_NON_BLOCKING
它在靜態模式中沒有作用。
<br>With #WRITE_BLOCKING
,寫入將會封鎖,直到所有數據都寫入音訊接收為止。
<br>With #WRITE_NON_BLOCKING
,寫入會在盡可能多的音訊數據佇列后立即傳回,而不會封鎖。
傳回
零或寫入的短褲正數,或下列其中一個錯誤碼。 短褲數目將是通道計數的倍數,不會超過 sizeInShorts。
<如果曲目未正確初始化</li li#ERROR_BAD_VALUE
>,如果參數無法解析為有效的數據和索引</li li#ERROR_DEAD_OBJECT
<>>,則為 ul><li<>,如果 AudioTrack 不再有效且需要重新建立。>#ERROR_INVALID_OPERATION
如果成功傳輸某些數據,則不會傳回無效的物件錯誤碼。 在此情況下,錯誤會在下一個 write()</li li 傳#ERROR
>回,以防其他錯誤</li<>></ul>
- 屬性
備註
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。 AudioTrack 建構函式中指定的格式應該 AudioFormat#ENCODING_PCM_16BIT
對應至陣列中的數據。
在串流模式中,封鎖行為取決於寫入模式。 如果寫入模式為 #WRITE_BLOCKING
,則寫入通常會封鎖,直到所有數據都加入佇列播放為止,而且會傳回完整傳輸計數。 不過,如果寫入模式為 #WRITE_NON_BLOCKING
,或追蹤在輸入時停止或暫停,或呼叫停止或暫停來中斷寫入的另一個線程,或在寫入期間發生 I/O 錯誤,則寫入可能會傳回簡短的傳輸計數。
在靜態緩衝區模式中,將數據複製到從位移0開始的緩衝區。 請注意,此數據的實際播放可能會在此函式傳回之後發生。
的 android.media.AudioTrack.write(short[], int, int, int)
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
適用於
Write(Single[], Int32, Int32, WriteMode)
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。
[Android.Runtime.Register("write", "([FIII)I", "GetWrite_arrayFIIIHandler")]
public virtual int Write (float[] audioData, int offsetInFloats, int sizeInFloats, Android.Media.WriteMode writeMode);
[<Android.Runtime.Register("write", "([FIII)I", "GetWrite_arrayFIIIHandler")>]
abstract member Write : single[] * int * int * Android.Media.WriteMode -> int
override this.Write : single[] * int * int * Android.Media.WriteMode -> int
參數
- audioData
- Single[]
保存要寫入之數據的陣列。 實作不會裁剪在名義範圍 [-1.0f, 1.0f] 內的範例值,前提是音訊管線中的所有收益都小於或等於 unity (1.0f),而且沒有可能會增加能量的後續處理效果,例如迴響。 為了方便使用具有非 Unity 增益的篩選來計算樣本的應用程式,允許超出名義範圍的樣本值 +3 dB。 不過,視音訊路徑中的各種收益和稍後處理而定,這類值最終可能會受到限制或裁剪。 因此,建議應用程式在名義範圍內提供樣本值。
- offsetInFloats
- Int32
位移,以數位浮點數表示,在要寫入之數據的 audioData 中。 不得為負數,或導致數據存取超出數位界限。
- sizeInFloats
- Int32
位移之後要寫入 audioData 的浮點數。 不得為負數,或導致數據存取超出數位界限。
- writeMode
- WriteMode
的其中#WRITE_BLOCKING
一個 #WRITE_NON_BLOCKING
它在靜態模式中沒有作用。
<br>With #WRITE_BLOCKING
,寫入將會封鎖,直到所有數據都寫入音訊接收為止。
<br>With #WRITE_NON_BLOCKING
,寫入會在盡可能多的音訊數據佇列后立即傳回,而不會封鎖。
傳回
零或寫入的浮點數為正數,或下列其中一個錯誤碼。 浮點數將是通道計數的倍數,不會超過 sizeInFloats。
<如果曲目未正確初始化</li li#ERROR_BAD_VALUE
>,如果參數無法解析為有效的數據和索引</li li#ERROR_DEAD_OBJECT
<>>,則為 ul><li<>,如果 AudioTrack 不再有效且需要重新建立。>#ERROR_INVALID_OPERATION
如果成功傳輸某些數據,則不會傳回無效的物件錯誤碼。 在此情況下,錯誤會在下一個 write()</li li 傳#ERROR
>回,以防其他錯誤</li<>></ul>
- 屬性
備註
將音訊數據寫入音訊接收以進行播放(串流模式),或複製音訊數據以供稍後播放(靜態緩衝區模式)。 AudioTrack 建構函式中指定的格式應該 AudioFormat#ENCODING_PCM_FLOAT
對應至陣列中的數據。
在串流模式中,封鎖行為取決於寫入模式。 如果寫入模式為 #WRITE_BLOCKING
,則寫入通常會封鎖,直到所有數據都加入佇列播放為止,而且會傳回完整傳輸計數。 不過,如果寫入模式為 #WRITE_NON_BLOCKING
,或追蹤在輸入時停止或暫停,或呼叫停止或暫停來中斷寫入的另一個線程,或在寫入期間發生 I/O 錯誤,則寫入可能會傳回簡短的傳輸計數。
在靜態緩衝區模式中,將數據複製到從位移0開始的緩衝區,並忽略寫入模式。 請注意,此數據的實際播放可能會在此函式傳回之後發生。
的 android.media.AudioTrack.write(float[], int, int, int)
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。