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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
/*
Tucnak - VHF contest log
Copyright (C) 2002-2013 Ladislav Vaiz <ok1zia@nagano.cz>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation.
*/
#include "header.h"
#include "dsp.h"
#ifdef HAVE_SLES_OPENSLES_H
#include <SLES/OpenSLES_Android.h>
#endif
int sles_open(struct dsp *dsp, int rec){
int result;
result = slCreateEngine(&(dsp->engineObject), 0, NULL, 0, NULL, NULL);
if (!rec){
// play
const SLInterfaceID ids[] = {SL_IID_VOLUME};
const SLboolean req[] = {SL_BOOLEAN_FALSE} ;
result = (*dsp->engineEngine)->CreateOutputMix(dsp->engineEngine, &(dsp->outputMixObject), 1, ids, req);
result = (*dsp->outputMixObject)->Realize(dsp->outputMixObject, SL_BOOLEAN_FALSE);
SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, dsp->channels, dsp->speed, SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16,
speakers, SL_BYTEORDER_LITTLEENDIAN};
SLDataSource audioSrc = {&loc_bufq, &format_pcm};
SLDataLocator_OutputMix loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, dsp->outputMixObject};
SLDataSink audioSnk = {&loc_outmix, NULL};
const SLInterfaceID ids1[] = {SL_IID_ANDROIDSIMPLEBUFFERQUEUE};
const SLboolean req1[] = {SL_BOOLEAN_TRUE};
result = (*dsp->engineEngine)->CreateAudioPlayer(dsp->engineEngine, &(dsp->bqPlayerObject), &audioSrc, &audioSnk, 1, ids1, req1);
result = (*dsp->bqPlayerObject)->Realize(dsp->bqPlayerObject, SL_BOOLEAN_FALSE);
result = (*dsp->bqPlayerObject)->GetInterface(dsp->bqPlayerObject, SL_IID_PLAY,&(dsp->bqPlayerPlay));
result = (*dsp->bqPlayerObject)->GetInterface(dsp->bqPlayerObject, SL_IID_ANDROIDSIMPLEBUFFERQUEUE, &(dsp->bqPlayerBufferQueue));
result = (*dsp->bqPlayerBufferQueue)->RegisterCallback(dsp->bqPlayerBufferQueue, bqPlayerCallback, dsp);
result = (*p->bqPlayerPlay)->SetPlayState(p->bqPlayerPlay, SL_PLAYSTATE_PLAYING);
}else{
// record
SLDataLocator_IODevice loc_dev = {SL_DATALOCATOR_IODEVICE, SL_IODEVICE_AUDIOINPUT, SL_DEFAULTDEVICEID_AUDIOINPUT, NULL};
SLDataSource audioSrc = {&loc_dev, NULL};
SLDataLocator_AndroidSimpleBufferQueue loc_bq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, channels, sr, SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16,
speakers, SL_BYTEORDER_LITTLEENDIAN};
SLDataSink audioSnk = {&loc_bq, &format_pcm};
const SLInterfaceID id[1] = {SL_IID_ANDROIDSIMPLEBUFFERQUEUE};
const SLboolean req[1] = {SL_BOOLEAN_TRUE};
result = (*p->engineEngine)->CreateAudioRecorder(p->engineEngine, &(p->recorderObject), &audioSrc, &audioSnk, 1, id, req);
result = (*p->recorderObject)->Realize(p->recorderObject, SL_BOOLEAN_FALSE);
result = (*p->recorderObject)->GetInterface(p->recorderObject, SL_IID_RECORD, &(p->recorderRecord));
result = (*p->recorderObject)->GetInterface(p->recorderObject, SL_IID_ANDROIDSIMPLEBUFFERQUEUE, &(p->recorderBufferQueue));
result = (*p->recorderBufferQueue)->RegisterCallback(p->recorderBufferQueue, bqRecorderCallback,p);
result = (*p->recorderRecord)->SetRecordState(
p->recorderRecord,SL_RECORDSTATE_RECORDING);
}
}
int sles_close(struct dsp *dsp){
}
int sles_write(struct dsp *dsp, void *data, int len){
}
int sles_read(struct dsp *dsp, void *data, int len){
}
int sles_reset(struct dsp *dsp){
}
int sles_sync(struct dsp *dsp){
}
int sles_set_format(struct dsp *dsp, SF_INFO *sfinfo, int ret){
}
|