33 { |
44 { |
34 err = iBody->Open(aUnit); |
45 err = iBody->Open(aUnit); |
35 } |
46 } |
36 return err; |
47 return err; |
37 } |
48 } |
38 |
49 |
|
50 /* |
|
51 Gets the version object of sound media driver. |
|
52 |
|
53 @return version object. |
|
54 |
|
55 */ |
39 EXPORT_C TVersion RMdaDevSound::VersionRequired() const |
56 EXPORT_C TVersion RMdaDevSound::VersionRequired() const |
40 { |
57 { |
41 if(iBody) |
58 if(iBody) |
42 { |
59 { |
43 return iBody->VersionRequired(); |
60 return iBody->VersionRequired(); |
44 } |
61 } |
45 return TVersion(); |
62 return TVersion(); |
46 } |
63 } |
47 |
64 |
|
65 /* |
|
66 Indicates whether the driver is sound media driver. |
|
67 |
|
68 @return KErrNone on success, otherwise System wide error code. |
|
69 |
|
70 */ |
48 EXPORT_C TInt RMdaDevSound::IsMdaSound() |
71 EXPORT_C TInt RMdaDevSound::IsMdaSound() |
49 { |
72 { |
50 return iBody->IsMdaSound(); |
73 return iBody->IsMdaSound(); |
51 } |
74 } |
52 |
75 |
|
76 /* |
|
77 This function gets the play volume. |
|
78 The range of volume level supported depends on the physical audio device used. |
|
79 |
|
80 @return Volume level. |
|
81 |
|
82 */ |
53 EXPORT_C TInt RMdaDevSound::PlayVolume() |
83 EXPORT_C TInt RMdaDevSound::PlayVolume() |
54 { |
84 { |
55 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
85 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
56 return iBody->PlayVolume(); |
86 return iBody->PlayVolume(); |
57 } |
87 } |
58 |
88 |
|
89 /* |
|
90 This function sets the play volume. |
|
91 The volume level depends on the physical audio device used. |
|
92 |
|
93 @param aVolume Play volume level in the range 0 to 255 inclusive |
|
94 @see TSoundFormatsSupported |
|
95 |
|
96 */ |
59 EXPORT_C void RMdaDevSound::SetPlayVolume(TInt aVolume) |
97 EXPORT_C void RMdaDevSound::SetPlayVolume(TInt aVolume) |
60 { |
98 { |
61 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
99 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
62 iBody->SetPlayVolume(aVolume); |
100 iBody->SetPlayVolume(aVolume); |
63 } |
101 } |
64 |
102 |
|
103 /* |
|
104 This function sets the play volume. |
|
105 The volume level depends on the physical audio device used. |
|
106 |
|
107 @param aVolume Play volume level. Logarithmic value. |
|
108 @see TSoundFormatsSupported |
|
109 |
|
110 */ |
65 EXPORT_C void RMdaDevSound::SetVolume(TInt aLogarithmicVolume) |
111 EXPORT_C void RMdaDevSound::SetVolume(TInt aLogarithmicVolume) |
66 { |
112 { |
67 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
113 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
68 iBody->SetVolume(aLogarithmicVolume); |
114 iBody->SetVolume(aLogarithmicVolume); |
69 } |
115 } |
70 |
116 |
|
117 /* |
|
118 This function cancels the currently playing sound. |
|
119 If paused, the pause will be cancelled. |
|
120 Will panic if not open. |
|
121 Will not cancel Notify*Error(). |
|
122 */ |
71 EXPORT_C void RMdaDevSound::CancelPlayData() |
123 EXPORT_C void RMdaDevSound::CancelPlayData() |
72 { |
124 { |
73 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
125 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
74 iBody->CancelPlayData(); |
126 iBody->CancelPlayData(); |
75 } |
127 } |
76 |
128 |
|
129 /* |
|
130 Gets the sound record volume. |
|
131 This depends on the physical audio device used. |
|
132 @return Record volume level. |
|
133 |
|
134 */ |
77 EXPORT_C TInt RMdaDevSound::RecordLevel() |
135 EXPORT_C TInt RMdaDevSound::RecordLevel() |
78 { |
136 { |
79 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
137 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
80 return iBody->RecordLevel(); |
138 return iBody->RecordLevel(); |
81 } |
139 } |
82 |
140 |
|
141 /* |
|
142 This function sets the device record volume level. |
|
143 This depends on the physical audio device used. |
|
144 @param aLevel Record volume level. |
|
145 @see TSoundFormatsSupported |
|
146 |
|
147 */ |
83 EXPORT_C void RMdaDevSound::SetRecordLevel(TInt aLevel) |
148 EXPORT_C void RMdaDevSound::SetRecordLevel(TInt aLevel) |
84 { |
149 { |
85 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
150 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
86 iBody->SetRecordLevel(aLevel); |
151 iBody->SetRecordLevel(aLevel); |
87 } |
152 } |
88 |
153 |
|
154 /* |
|
155 This function cancels the recording in progress. |
|
156 If paused, the pause will be cancelled. |
|
157 Any buffered data will be discarded. |
|
158 Will panic if not open. |
|
159 Will not cancel Notify*Error(). |
|
160 */ |
89 EXPORT_C void RMdaDevSound::CancelRecordData() |
161 EXPORT_C void RMdaDevSound::CancelRecordData() |
90 { |
162 { |
91 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
163 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
92 iBody->CancelRecordData(); |
164 iBody->CancelRecordData(); |
93 } |
165 } |
94 |
166 |
|
167 /* |
|
168 This function stops recording and completes the outstanding RecordData request immediately with any available data. |
|
169 Any following RecordData calls will be completed immediately returning any buffered data, they will NOT restart recording. |
|
170 |
|
171 It maybe called either when recording or stopped. |
|
172 |
|
173 The flushing state should be exited by calling CancelRecordData. |
|
174 |
|
175 The adaptor implements this functionality via Pause, which results in slightly different behaviour to the old RMdaDevSound driver. |
|
176 In particular the flushing state can also be exited by calling ResumeRecording, do NOT do this... If you want this behaviour, use the |
|
177 new PauseRecording/ResumeRecording functions. |
|
178 */ |
95 EXPORT_C void RMdaDevSound::FlushRecordBuffer() |
179 EXPORT_C void RMdaDevSound::FlushRecordBuffer() |
96 { |
180 { |
97 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
181 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
98 iBody->FlushRecordBuffer(); |
182 iBody->FlushRecordBuffer(); |
99 } |
183 } |
100 |
184 |
|
185 /* |
|
186 This function returns the number of bytes played by the driver since calling Open or |
|
187 calling ResetBytesPlayed(). |
|
188 |
|
189 It is not reset by PlayData or PausePlayBuffer/ResumePlayBuffer |
|
190 |
|
191 @see RMdaDevSound::ResetBytesPlayed() |
|
192 @return Number of bytes played. |
|
193 */ |
101 EXPORT_C TInt RMdaDevSound::BytesPlayed() |
194 EXPORT_C TInt RMdaDevSound::BytesPlayed() |
102 { |
195 { |
103 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
196 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
104 return iBody->BytesPlayed(); |
197 return iBody->BytesPlayed(); |
105 } |
198 } |
106 |
199 |
|
200 /* |
|
201 Resets the count of bytes played. |
|
202 |
|
203 If called whilst playing, the counter might not reset to exactly zero, it will reset to the number of bytes played in the current |
|
204 internal transfer. |
|
205 */ |
107 EXPORT_C void RMdaDevSound::ResetBytesPlayed() |
206 EXPORT_C void RMdaDevSound::ResetBytesPlayed() |
108 { |
207 { |
109 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
208 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
110 return iBody->ResetBytesPlayed(); |
209 return iBody->ResetBytesPlayed(); |
111 } |
210 } |
112 |
211 |
|
212 /* |
|
213 This function changes the audio play state to pause. |
|
214 It is legal to pause whilst not playing, in which case a following (single) PlayData request will be queued until |
|
215 ResumePlaying is called. |
|
216 */ |
113 EXPORT_C void RMdaDevSound::PausePlayBuffer() |
217 EXPORT_C void RMdaDevSound::PausePlayBuffer() |
114 { |
218 { |
115 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
219 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
116 iBody->PausePlayBuffer(); |
220 iBody->PausePlayBuffer(); |
117 } |
221 } |
118 |
222 |
|
223 |
|
224 /* |
|
225 This function starts the audio play from pause state. |
|
226 If a PlaData request was active when the Pause was requested it will continue. |
|
227 If a PlayData request was not active when the Pause was requested, but a one was issued whilst paused, |
|
228 it will start. |
|
229 If there is nothing to resume, we will notify KErrUnderflow. |
|
230 */ |
119 EXPORT_C void RMdaDevSound::ResumePlaying() |
231 EXPORT_C void RMdaDevSound::ResumePlaying() |
120 { |
232 { |
121 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
233 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
122 iBody->ResumePlaying(); |
234 iBody->ResumePlaying(); |
123 } |
235 } |
124 |
236 |
|
237 /* |
|
238 This function is identical to RMdaDevSound::ResumePlaying(), the parameter is ignored. |
|
239 */ |
125 EXPORT_C void RMdaDevSound::ResumePlaying(TRequestStatus&) |
240 EXPORT_C void RMdaDevSound::ResumePlaying(TRequestStatus&) |
126 { |
241 { |
127 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
242 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
128 iBody->ResumePlaying(); |
243 iBody->ResumePlaying(); |
129 } |
244 } |
130 |
245 |
|
246 /* |
|
247 The current record request will be completed early with partial contents and further |
|
248 recording paused. |
|
249 |
|
250 Any following RecordData calls will be completed immediately using any buffered data, it will NOT restart recording. |
|
251 |
|
252 */ |
131 EXPORT_C void RMdaDevSound::PauseRecordBuffer() |
253 EXPORT_C void RMdaDevSound::PauseRecordBuffer() |
132 { |
254 { |
133 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
255 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
134 iBody->PauseRecordBuffer(); |
256 iBody->PauseRecordBuffer(); |
135 } |
257 } |
136 |
258 |
|
259 /* |
|
260 Resume recording. |
|
261 Recorded data will be buffered internally. |
|
262 If an outstanding RecordData request was issued whilst paused it will be processed. |
|
263 */ |
137 EXPORT_C void RMdaDevSound::ResumeRecording() |
264 EXPORT_C void RMdaDevSound::ResumeRecording() |
138 { |
265 { |
139 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
266 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
140 iBody->ResumeRecording(); |
267 iBody->ResumeRecording(); |
141 } |
268 } |
142 |
269 |
|
270 /* |
|
271 Return the duration of the audio data which has been played. |
|
272 Note that this may be less than the amount of data/time queued. |
|
273 */ |
143 EXPORT_C TInt RMdaDevSound::GetTimePlayed(TTimeIntervalMicroSeconds& aTimePlayed) |
274 EXPORT_C TInt RMdaDevSound::GetTimePlayed(TTimeIntervalMicroSeconds& aTimePlayed) |
144 { |
275 { |
145 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
276 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
146 return iBody->GetTimePlayed(aTimePlayed); |
277 return iBody->GetTimePlayed(aTimePlayed); |
147 } |
278 } |
148 |
279 |
149 |
280 |
150 |
281 /* |
|
282 Gets the play format(capability) supported by this device. |
|
283 This record describes supported sample rate, encoding, volume level, channels, buffer size of the audio for playing. |
|
284 |
|
285 @param aFormatsSupported A reference to a client supplied TSoundFormatsSupported class to be filled by this function. |
|
286 @see TSoundFormatsSupported |
|
287 |
|
288 */ |
151 EXPORT_C void RMdaDevSound::PlayFormatsSupported(TSoundFormatsSupportedBuf& aFormatsSupported) |
289 EXPORT_C void RMdaDevSound::PlayFormatsSupported(TSoundFormatsSupportedBuf& aFormatsSupported) |
152 { |
290 { |
153 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
291 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
154 iBody->PlayFormatsSupported(aFormatsSupported); |
292 iBody->PlayFormatsSupported(aFormatsSupported); |
155 } |
293 } |
156 |
294 |
|
295 /* |
|
296 This function gets the current play format. |
|
297 |
|
298 @param aFormat A reference to a client supplied TCurrentSoundFormat class to be filled by this function. |
|
299 @see TCurrentSoundFormat |
|
300 |
|
301 */ |
157 EXPORT_C void RMdaDevSound::GetPlayFormat(TCurrentSoundFormatBuf& aFormat) |
302 EXPORT_C void RMdaDevSound::GetPlayFormat(TCurrentSoundFormatBuf& aFormat) |
158 { |
303 { |
159 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
304 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
160 iBody->GetPlayFormat(aFormat); |
305 iBody->GetPlayFormat(aFormat); |
161 } |
306 } |
162 |
307 |
|
308 /* |
|
309 This functions sets the play format. |
|
310 |
|
311 @param aFormat For the details refer to TCurrentSoundFormat. |
|
312 |
|
313 @see TCurrentSoundFormat |
|
314 |
|
315 @return KErrNone on success, |
|
316 KErrInUse if playing, |
|
317 KErrAccessDenied if play and recording sample rate is different, |
|
318 KErrNotSupported if input sound format does not match with supported capability, |
|
319 otherwise system wide error code. |
|
320 |
|
321 */ |
163 EXPORT_C TInt RMdaDevSound::SetPlayFormat(const TCurrentSoundFormatBuf& aFormat) |
322 EXPORT_C TInt RMdaDevSound::SetPlayFormat(const TCurrentSoundFormatBuf& aFormat) |
164 { |
323 { |
165 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
324 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
166 return iBody->SetPlayFormat(aFormat); |
325 return iBody->SetPlayFormat(aFormat); |
167 } |
326 } |
168 |
327 |
|
328 /* |
|
329 Gets the sound record format. |
|
330 This record describes supported sample rate, encoding, volume level, buffer size of the audio for recording. |
|
331 This depends on the physical device used. |
|
332 |
|
333 @param aFormatsSupported A reference to a client supplied TSoundFormatsSupported class to be filled by this function. |
|
334 @see TSoundFormatsSupported |
|
335 |
|
336 */ |
169 EXPORT_C void RMdaDevSound::RecordFormatsSupported(TSoundFormatsSupportedBuf& aFormatsSupported) |
337 EXPORT_C void RMdaDevSound::RecordFormatsSupported(TSoundFormatsSupportedBuf& aFormatsSupported) |
170 { |
338 { |
171 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
339 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
172 iBody->RecordFormatsSupported(aFormatsSupported); |
340 iBody->RecordFormatsSupported(aFormatsSupported); |
173 } |
341 } |
174 |
342 |
|
343 /* |
|
344 Gets a current sound format used for recording. |
|
345 |
|
346 @param aFormat A reference to a client supplied TCurrentSoundFormat class to be filled by this function. |
|
347 @see TCurrentSoundFormat |
|
348 |
|
349 */ |
175 EXPORT_C void RMdaDevSound::GetRecordFormat(TCurrentSoundFormatBuf& aFormat) |
350 EXPORT_C void RMdaDevSound::GetRecordFormat(TCurrentSoundFormatBuf& aFormat) |
176 { |
351 { |
177 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
352 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
178 iBody->GetRecordFormat(aFormat); |
353 iBody->GetRecordFormat(aFormat); |
179 } |
354 } |
180 |
355 |
|
356 /* |
|
357 Call this function to change the sound format used for recording. |
|
358 |
|
359 @param aFormat For details refer to TCurrentSoundFormat. |
|
360 @see TCurrentSoundFormat |
|
361 |
|
362 @return KErrNone on sucess, |
|
363 KErrInUse if recording already in progress, |
|
364 KErrAccessDenied play and record sample rates are different, |
|
365 otherwise system wide error code. |
|
366 |
|
367 */ |
181 EXPORT_C TInt RMdaDevSound::SetRecordFormat(const TCurrentSoundFormatBuf& aFormat) |
368 EXPORT_C TInt RMdaDevSound::SetRecordFormat(const TCurrentSoundFormatBuf& aFormat) |
182 { |
369 { |
183 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
370 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
184 return iBody->SetRecordFormat(aFormat); |
371 return iBody->SetRecordFormat(aFormat); |
185 } |
372 } |
201 return iBody->Handle(); |
388 return iBody->Handle(); |
202 } |
389 } |
203 return 0; |
390 return 0; |
204 } |
391 } |
205 |
392 |
|
393 /* |
|
394 Call this function to play the audio data in the supplied descriptor. |
|
395 |
|
396 Only a single request may be outstanding at any point in time. |
|
397 |
|
398 If paused, the request will be queued until ResumePlaying is called. |
|
399 |
|
400 @param aStatus For details refer to TRequestStatus. |
|
401 @see TRequestStatus |
|
402 |
|
403 @param aData Descriptor with play data |
|
404 |
|
405 */ |
206 EXPORT_C void RMdaDevSound::PlayData(TRequestStatus& aStatus, const TDesC8& aData) |
406 EXPORT_C void RMdaDevSound::PlayData(TRequestStatus& aStatus, const TDesC8& aData) |
207 { |
407 { |
208 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
408 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
209 iBody->PlayData(aStatus, aData); |
409 iBody->PlayData(aStatus, aData); |
210 } |
410 } |
211 |
411 |
|
412 /* |
|
413 Records audio data into the supplied descriptor. |
|
414 |
|
415 Only a single request may be outstanding at any point in time. |
|
416 |
|
417 If paused, the request will be queued until ResumeRecording is called. |
|
418 |
|
419 @param aStatus Request status |
|
420 @see TRequestStatus |
|
421 |
|
422 @param aData Record buffer descriptor. |
|
423 |
|
424 */ |
212 EXPORT_C void RMdaDevSound::RecordData(TRequestStatus& aStatus, TDes8& aData) |
425 EXPORT_C void RMdaDevSound::RecordData(TRequestStatus& aStatus, TDes8& aData) |
213 { |
426 { |
214 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
427 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
215 iBody->RecordData(aStatus, aData); |
428 iBody->RecordData(aStatus, aData); |
216 } |
429 } |
217 |
430 |
|
431 /* |
|
432 Call this function to notify any error encountered while recording audio. |
|
433 |
|
434 @param aStatus request object's completion code value |
|
435 @see TRequestStatus |
|
436 |
|
437 */ |
218 EXPORT_C void RMdaDevSound::NotifyRecordError(TRequestStatus& aStatus) |
438 EXPORT_C void RMdaDevSound::NotifyRecordError(TRequestStatus& aStatus) |
219 { |
439 { |
220 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
440 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
221 iBody->NotifyRecordError(aStatus); |
441 iBody->NotifyRecordError(aStatus); |
222 } |
442 } |
223 |
443 |
|
444 /* |
|
445 Call this function to notify the play error encountered while playing the sound. |
|
446 |
|
447 @param aStatus Error code stating the cause for the play error. |
|
448 |
|
449 */ |
224 EXPORT_C void RMdaDevSound::NotifyPlayError(TRequestStatus& aStatus) |
450 EXPORT_C void RMdaDevSound::NotifyPlayError(TRequestStatus& aStatus) |
225 { |
451 { |
226 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
452 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
227 iBody->NotifyPlayError(aStatus); |
453 iBody->NotifyPlayError(aStatus); |
228 } |
454 } |
229 |
455 |
|
456 /* |
|
457 This function cancels the play notification error. |
|
458 |
|
459 */ |
230 EXPORT_C void RMdaDevSound::CancelNotifyPlayError() |
460 EXPORT_C void RMdaDevSound::CancelNotifyPlayError() |
231 { |
461 { |
232 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
462 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
233 iBody->CancelNotifyPlayError(); |
463 iBody->CancelNotifyPlayError(); |
234 } |
464 } |
235 |
465 |
|
466 /* |
|
467 This function cancels the recording error notification. |
|
468 */ |
236 EXPORT_C void RMdaDevSound::CancelNotifyRecordError() |
469 EXPORT_C void RMdaDevSound::CancelNotifyRecordError() |
237 { |
470 { |
238 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
471 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
239 iBody->CancelNotifyRecordError(); |
472 iBody->CancelNotifyRecordError(); |
240 } |
473 } |
241 |
474 |
|
475 /* |
|
476 This function cancels the currently playing sound. |
|
477 If paused, the pause will be cancelled. |
|
478 |
|
479 This function is identical to CancelPlayData |
|
480 */ |
242 EXPORT_C void RMdaDevSound::FlushPlayBuffer() |
481 EXPORT_C void RMdaDevSound::FlushPlayBuffer() |
243 { |
482 { |
244 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
483 __ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened)); |
245 iBody->FlushPlayBuffer(); |
484 iBody->FlushPlayBuffer(); |
246 } |
485 } |