summaryrefslogtreecommitdiff
path: root/doc/html/recording.html
blob: 47c01786f578bedac76820774b147c383afa694e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<HTML>
<HEAD>
<TITLE>The RtAudio Home Page</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
<LINK REL="SHORTCUT ICON" HREF="http://www.music.mcgill.ca/~gary/favicon.ico">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<h1><a class="anchor" name="recording">Recording</a></h1>Using <a class="el" href="classRtAudio.html">RtAudio</a> for audio input is almost identical to the way it is used for playback. Here's the blocking playback example rewritten for recording:<p>
<div class="fragment"><pre class="fragment"><span class="preprocessor">#include "<a class="code" href="RtAudio_8h.html">RtAudio.h</a>"</span>
<span class="preprocessor">#include &lt;iostream&gt;</span>

<span class="keywordtype">int</span> record( <span class="keywordtype">void</span> *outputBuffer, <span class="keywordtype">void</span> *inputBuffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBufferFrames,
         <span class="keywordtype">double</span> streamTime, <a class="code" href="RtAudio_8h.html#a12">RtAudioStreamStatus</a> status, <span class="keywordtype">void</span> *userData )
{
  <span class="keywordflow">if</span> ( status )
    std::cout &lt;&lt; <span class="stringliteral">"Stream overflow detected!"</span> &lt;&lt; std::endl;

  <span class="comment">// Do something with the data in the "inputBuffer" buffer.</span>

  <span class="keywordflow">return</span> 0;
}

<span class="keywordtype">int</span> main()
{
  <a class="code" href="classRtAudio.html">RtAudio</a> adc;
  <span class="keywordflow">if</span> ( adc.<a class="code" href="classRtAudio.html#a3">getDeviceCount</a>() &lt; 1 ) {
    std::cout &lt;&lt; <span class="stringliteral">"\nNo audio devices found!\n"</span>;
    exit( 0 );
  }

  <a class="code" href="structRtAudio_1_1StreamParameters.html">RtAudio::StreamParameters</a> parameters;
  parameters.<a class="code" href="structRtAudio_1_1StreamParameters.html#o0">deviceId</a> = adc.<a class="code" href="classRtAudio.html#a6">getDefaultInputDevice</a>();
  parameters.<a class="code" href="structRtAudio_1_1StreamParameters.html#o1">nChannels</a> = 2;
  parameters.<a class="code" href="structRtAudio_1_1StreamParameters.html#o2">firstChannel</a> = 0;
  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sampleRate = 44100;
  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferFrames = 256; <span class="comment">// 256 sample frames</span>

  <span class="keywordflow">try</span> {
    adc.<a class="code" href="classRtAudio.html#a7">openStream</a>( NULL, &amp;parameters, RTAUDIO_SINT16,
                    sampleRate, &amp;bufferFrames, &amp;record );
    adc.<a class="code" href="classRtAudio.html#a9">startStream</a>();
  }
  <span class="keywordflow">catch</span> ( <a class="code" href="classRtError.html">RtError</a>&amp; e ) {
    e.<a class="code" href="classRtError.html#a2">printMessage</a>();
    exit( 0 );
  }
  
  <span class="keywordtype">char</span> input;
  std::cout &lt;&lt; <span class="stringliteral">"\nRecording ... press &lt;enter&gt; to quit.\n"</span>;
  std::cin.get( input );

  <span class="keywordflow">try</span> {
    <span class="comment">// Stop the stream</span>
    adc.<a class="code" href="classRtAudio.html#a10">stopStream</a>();
  }
  <span class="keywordflow">catch</span> (<a class="code" href="classRtError.html">RtError</a>&amp; e) {
    e.<a class="code" href="classRtError.html#a2">printMessage</a>();
  }

  <span class="keywordflow">if</span> ( adc.<a class="code" href="classRtAudio.html#a12">isStreamOpen</a>() ) adc.<a class="code" href="classRtAudio.html#a8">closeStream</a>();

  <span class="keywordflow">return</span> 0;
}
</pre></div><p>
In this example, we pass the address of the stream parameter structure as the second argument of the <a class="el" href="classRtAudio.html#a7">RtAudio::openStream()</a> function and pass a NULL value for the output stream parameters. In this example, the <em>record()</em> callback function performs no specific operations. <HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
  <td>&copy;2001-2007 Gary P. Scavone, McGill University. All Rights Reserved.<br>Maintained by <a href="http://www.music.mcgill.ca/~gary/">Gary P. Scavone</a>.</td></tr>
</table>

</BODY>
</HTML>