\hypertarget{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame}{}\doxysection{agora\+::media\+::I\+Audio\+Frame\+Observer\+Base\+::Audio\+Frame Struct Reference}
\label{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame}\index{agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}}


Raw audio data.  




{\ttfamily \#include $<$Agora\+Media\+Base.\+h$>$}

\doxysubsection*{Public Attributes}
\begin{DoxyCompactItemize}
\item 
\mbox{\hyperlink{classagora_1_1media_1_1_i_audio_frame_observer_base_aa0e2b429cd1e9e55f60614adffa01dac}{A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+T\+Y\+PE}} \mbox{\hyperlink{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a9e04a714fe2e4eebfcb0a0fcc408052d}{type}}
\item 
int \mbox{\hyperlink{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a49b3248c73b2cc26f356340fa2ad4e25}{samples\+Per\+Channel}}
\item 
agora\+::rtc\+::\+B\+Y\+T\+E\+S\+\_\+\+P\+E\+R\+\_\+\+S\+A\+M\+P\+LE \mbox{\hyperlink{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_aeaba879497222e6a31d045609399273f}{bytes\+Per\+Sample}}
\item 
int \mbox{\hyperlink{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a430c78087098e6274c4af455663293ef}{channels}}
\item 
int \mbox{\hyperlink{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a5cba3e92a33cd5112b6d26aa0c5746eb}{samples\+Per\+Sec}}
\item 
void $\ast$ \mbox{\hyperlink{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a758829545ac205eb11cea294a8cbfeee}{buffer}}
\item 
int64\+\_\+t \mbox{\hyperlink{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_aec488c2aa5e96fb7ed4d8f1dcd4d9fc0}{render\+Time\+Ms}}
\item 
int \mbox{\hyperlink{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a6b38aace45f60526536994b8dd8dbdb1}{avsync\+\_\+type}}
\item 
int64\+\_\+t \mbox{\hyperlink{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a025a9a7b8689ce61f1653e99d37382c9}{presentation\+Ms}}
\item 
int \mbox{\hyperlink{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a866adca216aea7a77f5e2de643f0f4a2}{audio\+Track\+Number}}
\item 
uint32\+\_\+t \mbox{\hyperlink{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a352c88d3426c135ad7575707a19b1405}{rtp\+Timestamp}}
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
Raw audio data. 

\doxysubsection{Member Data Documentation}
\mbox{\Hypertarget{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a9e04a714fe2e4eebfcb0a0fcc408052d}\label{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a9e04a714fe2e4eebfcb0a0fcc408052d}} 
\index{agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}!type@{type}}
\index{type@{type}!agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}}
\doxysubsubsection{\texorpdfstring{type}{type}}
{\footnotesize\ttfamily \mbox{\hyperlink{classagora_1_1media_1_1_i_audio_frame_observer_base_aa0e2b429cd1e9e55f60614adffa01dac}{A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+T\+Y\+PE}} agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base\+::\+Audio\+Frame\+::type}

The type of the audio frame. See {\ttfamily A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+T\+Y\+PE}. \mbox{\Hypertarget{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a49b3248c73b2cc26f356340fa2ad4e25}\label{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a49b3248c73b2cc26f356340fa2ad4e25}} 
\index{agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}!samplesPerChannel@{samplesPerChannel}}
\index{samplesPerChannel@{samplesPerChannel}!agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}}
\doxysubsubsection{\texorpdfstring{samplesPerChannel}{samplesPerChannel}}
{\footnotesize\ttfamily int agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base\+::\+Audio\+Frame\+::samples\+Per\+Channel}

The number of samples per channel in the audio frame. \mbox{\Hypertarget{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_aeaba879497222e6a31d045609399273f}\label{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_aeaba879497222e6a31d045609399273f}} 
\index{agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}!bytesPerSample@{bytesPerSample}}
\index{bytesPerSample@{bytesPerSample}!agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}}
\doxysubsubsection{\texorpdfstring{bytesPerSample}{bytesPerSample}}
{\footnotesize\ttfamily agora\+::rtc\+::\+B\+Y\+T\+E\+S\+\_\+\+P\+E\+R\+\_\+\+S\+A\+M\+P\+LE agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base\+::\+Audio\+Frame\+::bytes\+Per\+Sample}

The number of bytes per sample. For P\+CM, this parameter is generally set to 16 bits (2 bytes). \mbox{\Hypertarget{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a430c78087098e6274c4af455663293ef}\label{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a430c78087098e6274c4af455663293ef}} 
\index{agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}!channels@{channels}}
\index{channels@{channels}!agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}}
\doxysubsubsection{\texorpdfstring{channels}{channels}}
{\footnotesize\ttfamily int agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base\+::\+Audio\+Frame\+::channels}

The number of audio channels (the data are interleaved if it is stereo).
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\mbox{\Hypertarget{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a5cba3e92a33cd5112b6d26aa0c5746eb}\label{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a5cba3e92a33cd5112b6d26aa0c5746eb}} 
\index{agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}!samplesPerSec@{samplesPerSec}}
\index{samplesPerSec@{samplesPerSec}!agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}}
\doxysubsubsection{\texorpdfstring{samplesPerSec}{samplesPerSec}}
{\footnotesize\ttfamily int agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base\+::\+Audio\+Frame\+::samples\+Per\+Sec}

The number of samples per channel in the audio frame. \mbox{\Hypertarget{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a758829545ac205eb11cea294a8cbfeee}\label{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a758829545ac205eb11cea294a8cbfeee}} 
\index{agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}!buffer@{buffer}}
\index{buffer@{buffer}!agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}}
\doxysubsubsection{\texorpdfstring{buffer}{buffer}}
{\footnotesize\ttfamily void$\ast$ agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base\+::\+Audio\+Frame\+::buffer}

The data buffer of the audio frame. When the audio frame uses a stereo channel, the data buffer is interleaved. The size of the data buffer is as follows\+: {\ttfamily buffer} = {\ttfamily samples} × {\ttfamily channels} × {\ttfamily bytes\+Per\+Sample}. \mbox{\Hypertarget{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_aec488c2aa5e96fb7ed4d8f1dcd4d9fc0}\label{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_aec488c2aa5e96fb7ed4d8f1dcd4d9fc0}} 
\index{agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}!renderTimeMs@{renderTimeMs}}
\index{renderTimeMs@{renderTimeMs}!agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}}
\doxysubsubsection{\texorpdfstring{renderTimeMs}{renderTimeMs}}
{\footnotesize\ttfamily int64\+\_\+t agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base\+::\+Audio\+Frame\+::render\+Time\+Ms}

The timestamp (ms) of the external audio frame. You can use this timestamp to restore the order of the captured audio frame, and synchronize audio and video frames in video scenarios, including scenarios where external video sources are used. \mbox{\Hypertarget{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a6b38aace45f60526536994b8dd8dbdb1}\label{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a6b38aace45f60526536994b8dd8dbdb1}} 
\index{agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}!avsync\_type@{avsync\_type}}
\index{avsync\_type@{avsync\_type}!agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}}
\doxysubsubsection{\texorpdfstring{avsync\_type}{avsync\_type}}
{\footnotesize\ttfamily int agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base\+::\+Audio\+Frame\+::avsync\+\_\+type}

Reserved for future use. \mbox{\Hypertarget{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a025a9a7b8689ce61f1653e99d37382c9}\label{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a025a9a7b8689ce61f1653e99d37382c9}} 
\index{agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}!presentationMs@{presentationMs}}
\index{presentationMs@{presentationMs}!agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}}
\doxysubsubsection{\texorpdfstring{presentationMs}{presentationMs}}
{\footnotesize\ttfamily int64\+\_\+t agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base\+::\+Audio\+Frame\+::presentation\+Ms}

The pts timestamp of this audio frame.

This timestamp is used to indicate the origin pts time of the frame, and sync with video frame by the pts time stamp \mbox{\Hypertarget{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a866adca216aea7a77f5e2de643f0f4a2}\label{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a866adca216aea7a77f5e2de643f0f4a2}} 
\index{agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}!audioTrackNumber@{audioTrackNumber}}
\index{audioTrackNumber@{audioTrackNumber}!agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}}
\doxysubsubsection{\texorpdfstring{audioTrackNumber}{audioTrackNumber}}
{\footnotesize\ttfamily int agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base\+::\+Audio\+Frame\+::audio\+Track\+Number}

The number of the audio track. \mbox{\Hypertarget{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a352c88d3426c135ad7575707a19b1405}\label{structagora_1_1media_1_1_i_audio_frame_observer_base_1_1_audio_frame_a352c88d3426c135ad7575707a19b1405}} 
\index{agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}!rtpTimestamp@{rtpTimestamp}}
\index{rtpTimestamp@{rtpTimestamp}!agora::media::IAudioFrameObserverBase::AudioFrame@{agora::media::IAudioFrameObserverBase::AudioFrame}}
\doxysubsubsection{\texorpdfstring{rtpTimestamp}{rtpTimestamp}}
{\footnotesize\ttfamily uint32\+\_\+t agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base\+::\+Audio\+Frame\+::rtp\+Timestamp}

R\+TP timestamp of the first sample in the audio frame 