-rw-r--r-- | noncore/multimedia/opieplayer2/mediaplayer.cpp | 4 | ||||
-rw-r--r-- | noncore/multimedia/opierec/device.cpp | 16 | ||||
-rw-r--r-- | noncore/multimedia/opierec/qtrec.cpp | 7 |
3 files changed, 27 insertions, 0 deletions
diff --git a/noncore/multimedia/opieplayer2/mediaplayer.cpp b/noncore/multimedia/opieplayer2/mediaplayer.cpp index 7b4bfd9..e6afbd8 100644 --- a/noncore/multimedia/opieplayer2/mediaplayer.cpp +++ b/noncore/multimedia/opieplayer2/mediaplayer.cpp | |||
@@ -1,403 +1,407 @@ | |||
1 | #include "mediaplayer.h" | 1 | #include "mediaplayer.h" |
2 | #include "audiowidget.h" | 2 | #include "audiowidget.h" |
3 | #include "videowidget.h" | 3 | #include "videowidget.h" |
4 | #include "volumecontrol.h" | 4 | #include "volumecontrol.h" |
5 | 5 | ||
6 | /* OPIE */ | 6 | /* OPIE */ |
7 | #include <opie2/odebug.h> | 7 | #include <opie2/odebug.h> |
8 | #include <qpe/qpeapplication.h> | 8 | #include <qpe/qpeapplication.h> |
9 | #include <qpe/config.h> | 9 | #include <qpe/config.h> |
10 | 10 | ||
11 | /* QT */ | 11 | /* QT */ |
12 | #include <qfileinfo.h> | 12 | #include <qfileinfo.h> |
13 | 13 | ||
14 | /* STD */ | 14 | /* STD */ |
15 | #include <linux/fb.h> | 15 | #include <linux/fb.h> |
16 | #include <sys/file.h> | 16 | #include <sys/file.h> |
17 | #include <sys/ioctl.h> | 17 | #include <sys/ioctl.h> |
18 | 18 | ||
19 | #define FBIOBLANK 0x4611 | 19 | #define FBIOBLANK 0x4611 |
20 | 20 | ||
21 | MediaPlayer::MediaPlayer( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QObject *parent, const char *name ) | 21 | MediaPlayer::MediaPlayer( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QObject *parent, const char *name ) |
22 | : QObject( parent, name ), volumeDirection( 0 ), mediaPlayerState( _mediaPlayerState ), playList( _playList ) { | 22 | : QObject( parent, name ), volumeDirection( 0 ), mediaPlayerState( _mediaPlayerState ), playList( _playList ) { |
23 | 23 | ||
24 | m_audioUI = 0; | 24 | m_audioUI = 0; |
25 | m_videoUI = 0; | 25 | m_videoUI = 0; |
26 | m_xineControl = 0; | 26 | m_xineControl = 0; |
27 | xine = new XINE::Lib( XINE::Lib::InitializeInThread ); | 27 | xine = new XINE::Lib( XINE::Lib::InitializeInThread ); |
28 | 28 | ||
29 | fd=-1;fl=-1; | 29 | fd=-1;fl=-1; |
30 | playList.setCaption( tr( "OpiePlayer: Initializating" ) ); | 30 | playList.setCaption( tr( "OpiePlayer: Initializating" ) ); |
31 | 31 | ||
32 | qApp->processEvents(); | 32 | qApp->processEvents(); |
33 | // QPEApplication::grabKeyboard(); // EVIL | 33 | // QPEApplication::grabKeyboard(); // EVIL |
34 | connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); | 34 | connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); |
35 | 35 | ||
36 | connect( &mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) ); | 36 | connect( &mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) ); |
37 | 37 | ||
38 | // What is pauseCheck good for? (Simon) | 38 | // What is pauseCheck good for? (Simon) |
39 | // connect( &mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( pauseCheck(bool) ) ); | 39 | // connect( &mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( pauseCheck(bool) ) ); |
40 | 40 | ||
41 | connect( &mediaPlayerState, SIGNAL( next() ), this, SLOT( next() ) ); | 41 | connect( &mediaPlayerState, SIGNAL( next() ), this, SLOT( next() ) ); |
42 | connect( &mediaPlayerState, SIGNAL( prev() ), this, SLOT( prev() ) ); | 42 | connect( &mediaPlayerState, SIGNAL( prev() ), this, SLOT( prev() ) ); |
43 | connect( &mediaPlayerState, SIGNAL( blankToggled(bool) ), this, SLOT ( blank(bool) ) ); | 43 | connect( &mediaPlayerState, SIGNAL( blankToggled(bool) ), this, SLOT ( blank(bool) ) ); |
44 | 44 | ||
45 | volControl = new VolumeControl; | 45 | volControl = new VolumeControl; |
46 | Config cfg( "OpiePlayer" ); | 46 | Config cfg( "OpiePlayer" ); |
47 | cfg.setGroup("PlayList"); | 47 | cfg.setGroup("PlayList"); |
48 | QString currentPlaylist = cfg.readEntry( "CurrentPlaylist", "default"); | 48 | QString currentPlaylist = cfg.readEntry( "CurrentPlaylist", "default"); |
49 | playList.setCaption( tr( "OpiePlayer: " ) + QFileInfo(currentPlaylist).baseName() ); | 49 | playList.setCaption( tr( "OpiePlayer: " ) + QFileInfo(currentPlaylist).baseName() ); |
50 | 50 | ||
51 | m_skinLoader = new SkinLoader; | 51 | m_skinLoader = new SkinLoader; |
52 | m_skinLoader->schedule( AudioWidget::guiInfo() ); | 52 | m_skinLoader->schedule( AudioWidget::guiInfo() ); |
53 | m_skinLoader->schedule( VideoWidget::guiInfo() ); | 53 | m_skinLoader->schedule( VideoWidget::guiInfo() ); |
54 | m_skinLoader->start(); | 54 | m_skinLoader->start(); |
55 | } | 55 | } |
56 | 56 | ||
57 | MediaPlayer::~MediaPlayer() { | 57 | MediaPlayer::~MediaPlayer() { |
58 | // this shold never happen, but one never knows... | 58 | // this shold never happen, but one never knows... |
59 | if ( xine ) { | 59 | if ( xine ) { |
60 | xine->ensureInitialized(); | 60 | xine->ensureInitialized(); |
61 | delete xine; | 61 | delete xine; |
62 | } | 62 | } |
63 | delete m_xineControl; | 63 | delete m_xineControl; |
64 | delete m_audioUI; | 64 | delete m_audioUI; |
65 | delete m_videoUI; | 65 | delete m_videoUI; |
66 | delete volControl; | 66 | delete volControl; |
67 | } | 67 | } |
68 | 68 | ||
69 | void MediaPlayer::pauseCheck( bool b ) { | 69 | void MediaPlayer::pauseCheck( bool b ) { |
70 | if ( b && !mediaPlayerState.isPlaying() ) { | 70 | if ( b && !mediaPlayerState.isPlaying() ) { |
71 | mediaPlayerState.setPaused( FALSE ); | 71 | mediaPlayerState.setPaused( FALSE ); |
72 | } | 72 | } |
73 | } | 73 | } |
74 | 74 | ||
75 | void MediaPlayer::play() { | 75 | void MediaPlayer::play() { |
76 | mediaPlayerState.setPlaying( FALSE ); | 76 | mediaPlayerState.setPlaying( FALSE ); |
77 | mediaPlayerState.setPlaying( TRUE ); | 77 | mediaPlayerState.setPlaying( TRUE ); |
78 | } | 78 | } |
79 | 79 | ||
80 | void MediaPlayer::setPlaying( bool play ) { | 80 | void MediaPlayer::setPlaying( bool play ) { |
81 | if ( !play ) { | 81 | if ( !play ) { |
82 | return; | 82 | return; |
83 | } | 83 | } |
84 | 84 | ||
85 | if ( mediaPlayerState.isPaused() ) { | 85 | if ( mediaPlayerState.isPaused() ) { |
86 | mediaPlayerState.setPaused( FALSE ); | 86 | mediaPlayerState.setPaused( FALSE ); |
87 | return; | 87 | return; |
88 | } | 88 | } |
89 | 89 | ||
90 | QString tickerText, time, fileName; | 90 | QString tickerText, time, fileName; |
91 | if ( playList.currentTab() != PlayListWidget::CurrentPlayList ) { | 91 | if ( playList.currentTab() != PlayListWidget::CurrentPlayList ) { |
92 | //if playing in file list.. play in a different way | 92 | //if playing in file list.. play in a different way |
93 | // random and looping settings enabled causes problems here, | 93 | // random and looping settings enabled causes problems here, |
94 | // since there is no selected file in the playlist, but a selected file in the file list, | 94 | // since there is no selected file in the playlist, but a selected file in the file list, |
95 | // so we remember and shutoff | 95 | // so we remember and shutoff |
96 | l = mediaPlayerState.isLooping(); | 96 | l = mediaPlayerState.isLooping(); |
97 | if(l) { | 97 | if(l) { |
98 | mediaPlayerState.setLooping( false ); | 98 | mediaPlayerState.setLooping( false ); |
99 | } | 99 | } |
100 | r = mediaPlayerState.isShuffled(); | 100 | r = mediaPlayerState.isShuffled(); |
101 | mediaPlayerState.setShuffled( false ); | 101 | mediaPlayerState.setShuffled( false ); |
102 | } | 102 | } |
103 | 103 | ||
104 | PlayListWidget::Entry playListEntry = playList.currentEntry(); | 104 | PlayListWidget::Entry playListEntry = playList.currentEntry(); |
105 | fileName = playListEntry.name; | 105 | fileName = playListEntry.name; |
106 | xineControl()->play( playListEntry.file ); | 106 | xineControl()->play( playListEntry.file ); |
107 | 107 | ||
108 | long seconds = mediaPlayerState.length(); | 108 | long seconds = mediaPlayerState.length(); |
109 | time.sprintf("%li:%02i", seconds/60, (int)seconds%60 ); | 109 | time.sprintf("%li:%02i", seconds/60, (int)seconds%60 ); |
110 | 110 | ||
111 | if( fileName.left(4) == "http" ) { | 111 | if( fileName.left(4) == "http" ) { |
112 | fileName = QFileInfo( fileName ).baseName(); | 112 | fileName = QFileInfo( fileName ).baseName(); |
113 | if ( xineControl()->getMetaInfo().isEmpty() ) { | 113 | if ( xineControl()->getMetaInfo().isEmpty() ) { |
114 | tickerText = tr( " File: " ) + fileName; | 114 | tickerText = tr( " File: " ) + fileName; |
115 | } else { | 115 | } else { |
116 | tickerText = xineControl()->getMetaInfo(); | 116 | tickerText = xineControl()->getMetaInfo(); |
117 | } | 117 | } |
118 | } else { | 118 | } else { |
119 | if ( xineControl()->getMetaInfo().isEmpty() ) { | 119 | if ( xineControl()->getMetaInfo().isEmpty() ) { |
120 | tickerText = tr( " File: " ) + fileName + tr( ", Length: " ) + time + " "; | 120 | tickerText = tr( " File: " ) + fileName + tr( ", Length: " ) + time + " "; |
121 | } else { | 121 | } else { |
122 | tickerText = xineControl()->getMetaInfo() + " Length: " + time + " "; | 122 | tickerText = xineControl()->getMetaInfo() + " Length: " + time + " "; |
123 | } | 123 | } |
124 | } | 124 | } |
125 | audioUI()->setTickerText( tickerText ); | 125 | audioUI()->setTickerText( tickerText ); |
126 | } | 126 | } |
127 | 127 | ||
128 | 128 | ||
129 | void MediaPlayer::prev() { | 129 | void MediaPlayer::prev() { |
130 | if( playList.currentTab() == PlayListWidget::CurrentPlayList ) { //if using the playlist | 130 | if( playList.currentTab() == PlayListWidget::CurrentPlayList ) { //if using the playlist |
131 | if ( playList.prev() ) { | 131 | if ( playList.prev() ) { |
132 | play(); | 132 | play(); |
133 | } else if ( mediaPlayerState.isLooping() ) { | 133 | } else if ( mediaPlayerState.isLooping() ) { |
134 | if ( playList.last() ) { | 134 | if ( playList.last() ) { |
135 | play(); | 135 | play(); |
136 | } | 136 | } |
137 | } else { | 137 | } else { |
138 | mediaPlayerState.setList(); | 138 | mediaPlayerState.setList(); |
139 | } | 139 | } |
140 | } | 140 | } |
141 | } | 141 | } |
142 | 142 | ||
143 | 143 | ||
144 | void MediaPlayer::next() { | 144 | void MediaPlayer::next() { |
145 | 145 | ||
146 | if(playList.currentTab() == PlayListWidget::CurrentPlayList) { //if using the playlist | 146 | if(playList.currentTab() == PlayListWidget::CurrentPlayList) { //if using the playlist |
147 | if ( playList.next() ) { | 147 | if ( playList.next() ) { |
148 | play(); | 148 | play(); |
149 | } else if ( mediaPlayerState.isLooping() ) { | 149 | } else if ( mediaPlayerState.isLooping() ) { |
150 | if ( playList.first() ) { | 150 | if ( playList.first() ) { |
151 | play(); | 151 | play(); |
152 | } | 152 | } |
153 | } else { | 153 | } else { |
154 | mediaPlayerState.setList(); | 154 | mediaPlayerState.setList(); |
155 | } | 155 | } |
156 | } else { //if playing from file list, let's just stop | 156 | } else { //if playing from file list, let's just stop |
157 | odebug << "<<<<<<<<<<<<<<<<<stop for filelists" << oendl; | 157 | odebug << "<<<<<<<<<<<<<<<<<stop for filelists" << oendl; |
158 | mediaPlayerState.setPlaying(false); | 158 | mediaPlayerState.setPlaying(false); |
159 | mediaPlayerState.setDisplayType( MediaPlayerState::MediaSelection ); | 159 | mediaPlayerState.setDisplayType( MediaPlayerState::MediaSelection ); |
160 | if(l) mediaPlayerState.setLooping(l); | 160 | if(l) mediaPlayerState.setLooping(l); |
161 | if(r) mediaPlayerState.setShuffled(r); | 161 | if(r) mediaPlayerState.setShuffled(r); |
162 | } | 162 | } |
163 | qApp->processEvents(); | 163 | qApp->processEvents(); |
164 | } | 164 | } |
165 | 165 | ||
166 | 166 | ||
167 | void MediaPlayer::startDecreasingVolume() { | 167 | void MediaPlayer::startDecreasingVolume() { |
168 | volumeDirection = -1; | 168 | volumeDirection = -1; |
169 | startTimer( 100 ); | 169 | startTimer( 100 ); |
170 | volControl->decVol(2); | 170 | volControl->decVol(2); |
171 | } | 171 | } |
172 | 172 | ||
173 | 173 | ||
174 | void MediaPlayer::startIncreasingVolume() { | 174 | void MediaPlayer::startIncreasingVolume() { |
175 | volumeDirection = +1; | 175 | volumeDirection = +1; |
176 | startTimer( 100 ); | 176 | startTimer( 100 ); |
177 | volControl->incVol(2); | 177 | volControl->incVol(2); |
178 | } | 178 | } |
179 | 179 | ||
180 | 180 | ||
181 | bool drawnOnScreenDisplay = FALSE; | 181 | bool drawnOnScreenDisplay = FALSE; |
182 | unsigned int onScreenDisplayVolume = 0; | 182 | unsigned int onScreenDisplayVolume = 0; |
183 | const int yoff = 110; | 183 | const int yoff = 110; |
184 | 184 | ||
185 | void MediaPlayer::stopChangingVolume() { | 185 | void MediaPlayer::stopChangingVolume() { |
186 | killTimers(); | 186 | killTimers(); |
187 | // Get rid of the on-screen display stuff | 187 | // Get rid of the on-screen display stuff |
188 | drawnOnScreenDisplay = FALSE; | 188 | drawnOnScreenDisplay = FALSE; |
189 | onScreenDisplayVolume = 0; | 189 | onScreenDisplayVolume = 0; |
190 | int w=0; | 190 | int w=0; |
191 | int h=0; | 191 | int h=0; |
192 | if( !xineControl()->hasVideo() ) { | 192 | if( !xineControl()->hasVideo() ) { |
193 | w = audioUI()->width(); | 193 | w = audioUI()->width(); |
194 | h = audioUI()->height(); | 194 | h = audioUI()->height(); |
195 | audioUI()->repaint( ( w - 200 ) / 2, h - yoff, 200 + 9, 70, FALSE ); | 195 | audioUI()->repaint( ( w - 200 ) / 2, h - yoff, 200 + 9, 70, FALSE ); |
196 | } else { | 196 | } else { |
197 | w = videoUI()->width(); | 197 | w = videoUI()->width(); |
198 | h = videoUI()->height(); | 198 | h = videoUI()->height(); |
199 | videoUI()->repaint( ( w - 200 ) / 2, h - yoff, 200 + 9, 70, FALSE ); | 199 | videoUI()->repaint( ( w - 200 ) / 2, h - yoff, 200 + 9, 70, FALSE ); |
200 | } | 200 | } |
201 | } | 201 | } |
202 | 202 | ||
203 | 203 | ||
204 | void MediaPlayer::timerEvent( QTimerEvent * ) { | 204 | void MediaPlayer::timerEvent( QTimerEvent * ) { |
205 | if ( volumeDirection == +1 ) { | 205 | if ( volumeDirection == +1 ) { |
206 | volControl->incVol( 2 ); | 206 | volControl->incVol( 2 ); |
207 | } else if ( volumeDirection == -1 ) { | 207 | } else if ( volumeDirection == -1 ) { |
208 | volControl->decVol( 2 ); | 208 | volControl->decVol( 2 ); |
209 | } | 209 | } |
210 | 210 | ||
211 | 211 | ||
212 | // TODO FIXME | 212 | // TODO FIXME |
213 | // huh?? | 213 | // huh?? |
214 | unsigned int v= 0; | 214 | unsigned int v= 0; |
215 | v = volControl->volume(); | 215 | v = volControl->volume(); |
216 | v = v / 10; | 216 | v = v / 10; |
217 | 217 | ||
218 | if ( drawnOnScreenDisplay && onScreenDisplayVolume == v ) { | 218 | if ( drawnOnScreenDisplay && onScreenDisplayVolume == v ) { |
219 | return; | 219 | return; |
220 | } | 220 | } |
221 | 221 | ||
222 | int w=0; int h=0; | 222 | int w=0; int h=0; |
223 | if( !xineControl()->hasVideo() ) { | 223 | if( !xineControl()->hasVideo() ) { |
224 | w = audioUI()->width(); | 224 | w = audioUI()->width(); |
225 | h = audioUI()->height(); | 225 | h = audioUI()->height(); |
226 | 226 | ||
227 | if ( drawnOnScreenDisplay ) { | 227 | if ( drawnOnScreenDisplay ) { |
228 | if ( onScreenDisplayVolume > v ) { | 228 | if ( onScreenDisplayVolume > v ) { |
229 | audioUI()->repaint( ( w - 200 ) / 2 + v * 20 + 0, h - yoff + 40, ( onScreenDisplayVolume - v ) * 20 + 9, 30, FALSE ); | 229 | audioUI()->repaint( ( w - 200 ) / 2 + v * 20 + 0, h - yoff + 40, ( onScreenDisplayVolume - v ) * 20 + 9, 30, FALSE ); |
230 | } | 230 | } |
231 | } | 231 | } |
232 | drawnOnScreenDisplay = TRUE; | 232 | drawnOnScreenDisplay = TRUE; |
233 | onScreenDisplayVolume = v; | 233 | onScreenDisplayVolume = v; |
234 | QPainter p( audioUI() ); | 234 | QPainter p( audioUI() ); |
235 | p.setPen( QColor( 0x10, 0xD0, 0x10 ) ); | 235 | p.setPen( QColor( 0x10, 0xD0, 0x10 ) ); |
236 | p.setBrush( QColor( 0x10, 0xD0, 0x10 ) ); | 236 | p.setBrush( QColor( 0x10, 0xD0, 0x10 ) ); |
237 | 237 | ||
238 | QFont f; | 238 | QFont f; |
239 | f.setPixelSize( 20 ); | 239 | f.setPixelSize( 20 ); |
240 | f.setBold( TRUE ); | 240 | f.setBold( TRUE ); |
241 | p.setFont( f ); | 241 | p.setFont( f ); |
242 | p.drawText( (w - 200) / 2, h - yoff + 20, tr("Volume") ); | 242 | p.drawText( (w - 200) / 2, h - yoff + 20, tr("Volume") ); |
243 | 243 | ||
244 | for ( unsigned int i = 0; i < 10; i++ ) { | 244 | for ( unsigned int i = 0; i < 10; i++ ) { |
245 | if ( v > i ) { | 245 | if ( v > i ) { |
246 | p.drawRect( ( w - 200 ) / 2 + i * 20 + 0, h - yoff + 40, 9, 30 ); | 246 | p.drawRect( ( w - 200 ) / 2 + i * 20 + 0, h - yoff + 40, 9, 30 ); |
247 | } else { | 247 | } else { |
248 | p.drawRect( ( w - 200 ) / 2 + i * 20 + 3, h - yoff + 50, 3, 10 ); | 248 | p.drawRect( ( w - 200 ) / 2 + i * 20 + 3, h - yoff + 50, 3, 10 ); |
249 | } | 249 | } |
250 | } | 250 | } |
251 | } else { | 251 | } else { |
252 | w = videoUI()->width(); | 252 | w = videoUI()->width(); |
253 | h = videoUI()->height(); | 253 | h = videoUI()->height(); |
254 | 254 | ||
255 | if ( drawnOnScreenDisplay ) { | 255 | if ( drawnOnScreenDisplay ) { |
256 | if ( onScreenDisplayVolume > v ) { | 256 | if ( onScreenDisplayVolume > v ) { |
257 | videoUI()->repaint( (w - 200) / 2 + v * 20 + 0, h - yoff + 40, ( onScreenDisplayVolume - v ) * 20 + 9, 30, FALSE ); | 257 | videoUI()->repaint( (w - 200) / 2 + v * 20 + 0, h - yoff + 40, ( onScreenDisplayVolume - v ) * 20 + 9, 30, FALSE ); |
258 | } | 258 | } |
259 | } | 259 | } |
260 | drawnOnScreenDisplay = TRUE; | 260 | drawnOnScreenDisplay = TRUE; |
261 | onScreenDisplayVolume = v; | 261 | onScreenDisplayVolume = v; |
262 | QPainter p( videoUI() ); | 262 | QPainter p( videoUI() ); |
263 | p.setPen( QColor( 0x10, 0xD0, 0x10 ) ); | 263 | p.setPen( QColor( 0x10, 0xD0, 0x10 ) ); |
264 | p.setBrush( QColor( 0x10, 0xD0, 0x10 ) ); | 264 | p.setBrush( QColor( 0x10, 0xD0, 0x10 ) ); |
265 | 265 | ||
266 | QFont f; | 266 | QFont f; |
267 | f.setPixelSize( 20 ); | 267 | f.setPixelSize( 20 ); |
268 | f.setBold( TRUE ); | 268 | f.setBold( TRUE ); |
269 | p.setFont( f ); | 269 | p.setFont( f ); |
270 | p.drawText( (w - 200) / 2, h - yoff + 20, tr( "Volume" ) ); | 270 | p.drawText( (w - 200) / 2, h - yoff + 20, tr( "Volume" ) ); |
271 | 271 | ||
272 | for ( unsigned int i = 0; i < 10; i++ ) { | 272 | for ( unsigned int i = 0; i < 10; i++ ) { |
273 | if ( v > i ) { | 273 | if ( v > i ) { |
274 | p.drawRect( (w - 200) / 2 + i * 20 + 0, h - yoff + 40, 9, 30 ); | 274 | p.drawRect( (w - 200) / 2 + i * 20 + 0, h - yoff + 40, 9, 30 ); |
275 | } else { | 275 | } else { |
276 | p.drawRect( (w - 200) / 2 + i * 20 + 3, h - yoff + 50, 3, 10 ); | 276 | p.drawRect( (w - 200) / 2 + i * 20 + 3, h - yoff + 50, 3, 10 ); |
277 | } | 277 | } |
278 | } | 278 | } |
279 | } | 279 | } |
280 | } | 280 | } |
281 | 281 | ||
282 | 282 | ||
283 | void MediaPlayer::blank( bool b ) { | 283 | void MediaPlayer::blank( bool b ) { |
284 | #ifdef QT_QWS_DEVFS | ||
285 | fd=open("/dev/fb/0",O_RDWR); | ||
286 | #else | ||
284 | fd=open("/dev/fb0",O_RDWR); | 287 | fd=open("/dev/fb0",O_RDWR); |
288 | #endif | ||
285 | #ifdef QT_QWS_SL5XXX | 289 | #ifdef QT_QWS_SL5XXX |
286 | fl= open( "/dev/fl", O_RDWR ); | 290 | fl= open( "/dev/fl", O_RDWR ); |
287 | #endif | 291 | #endif |
288 | if (fd != -1) { | 292 | if (fd != -1) { |
289 | if ( b ) { | 293 | if ( b ) { |
290 | odebug << "do blanking" << oendl; | 294 | odebug << "do blanking" << oendl; |
291 | #ifdef QT_QWS_SL5XXX | 295 | #ifdef QT_QWS_SL5XXX |
292 | ioctl( fd, FBIOBLANK, 1 ); | 296 | ioctl( fd, FBIOBLANK, 1 ); |
293 | if(fl !=-1) { | 297 | if(fl !=-1) { |
294 | ioctl( fl, 2 ); | 298 | ioctl( fl, 2 ); |
295 | ::close(fl); | 299 | ::close(fl); |
296 | } | 300 | } |
297 | #else | 301 | #else |
298 | ioctl( fd, FBIOBLANK, 3 ); | 302 | ioctl( fd, FBIOBLANK, 3 ); |
299 | #endif | 303 | #endif |
300 | isBlanked = TRUE; | 304 | isBlanked = TRUE; |
301 | } else { | 305 | } else { |
302 | odebug << "do unblanking" << oendl; | 306 | odebug << "do unblanking" << oendl; |
303 | ioctl( fd, FBIOBLANK, 0); | 307 | ioctl( fd, FBIOBLANK, 0); |
304 | #ifdef QT_QWS_SL5XXX | 308 | #ifdef QT_QWS_SL5XXX |
305 | if(fl != -1) { | 309 | if(fl != -1) { |
306 | ioctl( fl, 1); | 310 | ioctl( fl, 1); |
307 | ::close(fl); | 311 | ::close(fl); |
308 | } | 312 | } |
309 | #endif | 313 | #endif |
310 | isBlanked = FALSE; | 314 | isBlanked = FALSE; |
311 | } | 315 | } |
312 | close( fd ); | 316 | close( fd ); |
313 | } else { | 317 | } else { |
314 | odebug << "<< /dev/fb0 could not be opened >>" << oendl; | 318 | odebug << "<< /dev/fb0 could not be opened >>" << oendl; |
315 | } | 319 | } |
316 | } | 320 | } |
317 | 321 | ||
318 | void MediaPlayer::keyReleaseEvent( QKeyEvent *e) { | 322 | void MediaPlayer::keyReleaseEvent( QKeyEvent *e) { |
319 | switch ( e->key() ) { | 323 | switch ( e->key() ) { |
320 | ////////////////////////////// Zaurus keys | 324 | ////////////////////////////// Zaurus keys |
321 | case Key_Home: | 325 | case Key_Home: |
322 | break; | 326 | break; |
323 | case Key_F9: //activity | 327 | case Key_F9: //activity |
324 | break; | 328 | break; |
325 | case Key_F10: //contacts | 329 | case Key_F10: //contacts |
326 | break; | 330 | break; |
327 | case Key_F11: //menu | 331 | case Key_F11: //menu |
328 | break; | 332 | break; |
329 | case Key_F12: //home | 333 | case Key_F12: //home |
330 | odebug << "Blank here" << oendl; | 334 | odebug << "Blank here" << oendl; |
331 | // mediaPlayerState->toggleBlank(); | 335 | // mediaPlayerState->toggleBlank(); |
332 | break; | 336 | break; |
333 | case Key_F13: //mail | 337 | case Key_F13: //mail |
334 | odebug << "Blank here" << oendl; | 338 | odebug << "Blank here" << oendl; |
335 | // mediaPlayerState->toggleBlank(); | 339 | // mediaPlayerState->toggleBlank(); |
336 | break; | 340 | break; |
337 | } | 341 | } |
338 | } | 342 | } |
339 | 343 | ||
340 | void MediaPlayer::cleanUp() {// this happens on closing | 344 | void MediaPlayer::cleanUp() {// this happens on closing |
341 | Config cfg( "OpiePlayer" ); | 345 | Config cfg( "OpiePlayer" ); |
342 | mediaPlayerState.writeConfig( cfg ); | 346 | mediaPlayerState.writeConfig( cfg ); |
343 | playList.writeDefaultPlaylist( ); | 347 | playList.writeDefaultPlaylist( ); |
344 | 348 | ||
345 | // QPEApplication::grabKeyboard(); | 349 | // QPEApplication::grabKeyboard(); |
346 | // QPEApplication::ungrabKeyboard(); | 350 | // QPEApplication::ungrabKeyboard(); |
347 | } | 351 | } |
348 | 352 | ||
349 | void MediaPlayer::recreateAudioAndVideoWidgets() const | 353 | void MediaPlayer::recreateAudioAndVideoWidgets() const |
350 | { | 354 | { |
351 | delete m_skinLoader; | 355 | delete m_skinLoader; |
352 | 356 | ||
353 | delete m_xineControl; | 357 | delete m_xineControl; |
354 | delete m_audioUI; | 358 | delete m_audioUI; |
355 | delete m_videoUI; | 359 | delete m_videoUI; |
356 | m_audioUI = new AudioWidget( playList, mediaPlayerState, 0, "audioUI" ); | 360 | m_audioUI = new AudioWidget( playList, mediaPlayerState, 0, "audioUI" ); |
357 | m_videoUI = new VideoWidget( playList, mediaPlayerState, 0, "videoUI" ); | 361 | m_videoUI = new VideoWidget( playList, mediaPlayerState, 0, "videoUI" ); |
358 | 362 | ||
359 | connect( m_audioUI, SIGNAL( moreClicked() ), this, SLOT( startIncreasingVolume() ) ); | 363 | connect( m_audioUI, SIGNAL( moreClicked() ), this, SLOT( startIncreasingVolume() ) ); |
360 | connect( m_audioUI, SIGNAL( lessClicked() ), this, SLOT( startDecreasingVolume() ) ); | 364 | connect( m_audioUI, SIGNAL( lessClicked() ), this, SLOT( startDecreasingVolume() ) ); |
361 | connect( m_audioUI, SIGNAL( moreReleased() ), this, SLOT( stopChangingVolume() ) ); | 365 | connect( m_audioUI, SIGNAL( moreReleased() ), this, SLOT( stopChangingVolume() ) ); |
362 | connect( m_audioUI, SIGNAL( lessReleased() ), this, SLOT( stopChangingVolume() ) ); | 366 | connect( m_audioUI, SIGNAL( lessReleased() ), this, SLOT( stopChangingVolume() ) ); |
363 | 367 | ||
364 | connect( m_videoUI, SIGNAL( moreClicked() ), this, SLOT( startIncreasingVolume() ) ); | 368 | connect( m_videoUI, SIGNAL( moreClicked() ), this, SLOT( startIncreasingVolume() ) ); |
365 | connect( m_videoUI, SIGNAL( lessClicked() ), this, SLOT( startDecreasingVolume() ) ); | 369 | connect( m_videoUI, SIGNAL( lessClicked() ), this, SLOT( startDecreasingVolume() ) ); |
366 | connect( m_videoUI, SIGNAL( moreReleased() ), this, SLOT( stopChangingVolume() ) ); | 370 | connect( m_videoUI, SIGNAL( moreReleased() ), this, SLOT( stopChangingVolume() ) ); |
367 | connect( m_videoUI, SIGNAL( lessReleased() ), this, SLOT( stopChangingVolume() ) ); | 371 | connect( m_videoUI, SIGNAL( lessReleased() ), this, SLOT( stopChangingVolume() ) ); |
368 | 372 | ||
369 | if ( !xine ) | 373 | if ( !xine ) |
370 | xine = new XINE::Lib( XINE::Lib::InitializeImmediately ); | 374 | xine = new XINE::Lib( XINE::Lib::InitializeImmediately ); |
371 | 375 | ||
372 | m_xineControl = new XineControl( xine, m_videoUI->vidWidget(), mediaPlayerState ); | 376 | m_xineControl = new XineControl( xine, m_videoUI->vidWidget(), mediaPlayerState ); |
373 | 377 | ||
374 | xine = 0; | 378 | xine = 0; |
375 | } | 379 | } |
376 | 380 | ||
377 | AudioWidget *MediaPlayer::audioUI() const | 381 | AudioWidget *MediaPlayer::audioUI() const |
378 | { | 382 | { |
379 | if ( !m_audioUI ) | 383 | if ( !m_audioUI ) |
380 | recreateAudioAndVideoWidgets(); | 384 | recreateAudioAndVideoWidgets(); |
381 | return m_audioUI; | 385 | return m_audioUI; |
382 | } | 386 | } |
383 | 387 | ||
384 | VideoWidget *MediaPlayer::videoUI() const | 388 | VideoWidget *MediaPlayer::videoUI() const |
385 | { | 389 | { |
386 | if ( !m_videoUI ) | 390 | if ( !m_videoUI ) |
387 | recreateAudioAndVideoWidgets(); | 391 | recreateAudioAndVideoWidgets(); |
388 | return m_videoUI; | 392 | return m_videoUI; |
389 | } | 393 | } |
390 | 394 | ||
391 | XineControl *MediaPlayer::xineControl() const | 395 | XineControl *MediaPlayer::xineControl() const |
392 | { | 396 | { |
393 | if ( !m_xineControl ) | 397 | if ( !m_xineControl ) |
394 | recreateAudioAndVideoWidgets(); | 398 | recreateAudioAndVideoWidgets(); |
395 | return m_xineControl; | 399 | return m_xineControl; |
396 | } | 400 | } |
397 | 401 | ||
398 | void MediaPlayer::reloadSkins() | 402 | void MediaPlayer::reloadSkins() |
399 | { | 403 | { |
400 | audioUI()->loadSkin(); | 404 | audioUI()->loadSkin(); |
401 | videoUI()->loadSkin(); | 405 | videoUI()->loadSkin(); |
402 | } | 406 | } |
403 | 407 | ||
diff --git a/noncore/multimedia/opierec/device.cpp b/noncore/multimedia/opierec/device.cpp index 683f0a5..cb47b77 100644 --- a/noncore/multimedia/opierec/device.cpp +++ b/noncore/multimedia/opierec/device.cpp | |||
@@ -1,358 +1,374 @@ | |||
1 | // device.cpp | 1 | // device.cpp |
2 | 2 | ||
3 | #include "device.h" | 3 | #include "device.h" |
4 | 4 | ||
5 | #include <qpe/config.h> | 5 | #include <qpe/config.h> |
6 | #include <qpe/qcopenvelope_qws.h> | 6 | #include <qpe/qcopenvelope_qws.h> |
7 | 7 | ||
8 | /* STD */ | 8 | /* STD */ |
9 | #include <fcntl.h> | 9 | #include <fcntl.h> |
10 | #include <stdio.h> | 10 | #include <stdio.h> |
11 | #include <stdlib.h> | 11 | #include <stdlib.h> |
12 | #include <sys/ioctl.h> | 12 | #include <sys/ioctl.h> |
13 | #include <sys/soundcard.h> | 13 | #include <sys/soundcard.h> |
14 | #include <unistd.h> | 14 | #include <unistd.h> |
15 | #include <sys/wait.h> | 15 | #include <sys/wait.h> |
16 | #include <unistd.h> | 16 | #include <unistd.h> |
17 | #include <errno.h> | 17 | #include <errno.h> |
18 | 18 | ||
19 | //extern QtRec *qperec; | 19 | //extern QtRec *qperec; |
20 | 20 | ||
21 | Device::Device( QObject * parent, const char * dsp, const char * mixr, bool record ) | 21 | Device::Device( QObject * parent, const char * dsp, const char * mixr, bool record ) |
22 | : QObject( parent) | 22 | : QObject( parent) |
23 | { | 23 | { |
24 | dspstr = (char *)dsp; | 24 | dspstr = (char *)dsp; |
25 | mixstr = (char *)mixr; | 25 | mixstr = (char *)mixr; |
26 | 26 | ||
27 | devForm=-1; | 27 | devForm=-1; |
28 | devCh=-1; | 28 | devCh=-1; |
29 | devRate=-1; | 29 | devRate=-1; |
30 | 30 | ||
31 | if( !record){ //playing | 31 | if( !record){ //playing |
32 | qDebug( "setting up DSP for playing" ); | 32 | qDebug( "setting up DSP for playing" ); |
33 | flags = O_WRONLY; | 33 | flags = O_WRONLY; |
34 | } else { //recording | 34 | } else { //recording |
35 | qDebug( "setting up DSP for recording" ); | 35 | qDebug( "setting up DSP for recording" ); |
36 | flags = O_RDWR; | 36 | flags = O_RDWR; |
37 | // flags = O_RDONLY; | 37 | // flags = O_RDONLY; |
38 | 38 | ||
39 | // selectMicInput(); | 39 | // selectMicInput(); |
40 | 40 | ||
41 | } | 41 | } |
42 | } | 42 | } |
43 | 43 | ||
44 | bool Device::openDsp() { | 44 | bool Device::openDsp() { |
45 | if( openDevice( flags) == -1) { | 45 | if( openDevice( flags) == -1) { |
46 | perror("<<<<<<<<<<<<<<ioctl(\"Open device\")"); | 46 | perror("<<<<<<<<<<<<<<ioctl(\"Open device\")"); |
47 | return false; | 47 | return false; |
48 | } | 48 | } |
49 | return true; | 49 | return true; |
50 | } | 50 | } |
51 | 51 | ||
52 | int Device::openDevice( int flags) { | 52 | int Device::openDevice( int flags) { |
53 | /* pid_t pid; | 53 | /* pid_t pid; |
54 | int status; | 54 | int status; |
55 | int pipefd[2]; | 55 | int pipefd[2]; |
56 | char message[20]; | 56 | char message[20]; |
57 | if (pipe(pipefd) == -1){ | 57 | if (pipe(pipefd) == -1){ |
58 | perror ("Error creating pipe"); | 58 | perror ("Error creating pipe"); |
59 | exit(1); | 59 | exit(1); |
60 | } | 60 | } |
61 | switch (pid = fork()) { | 61 | switch (pid = fork()) { |
62 | case -1: | 62 | case -1: |
63 | perror("The fork failed!"); | 63 | perror("The fork failed!"); |
64 | break; | 64 | break; |
65 | case 0: { | 65 | case 0: { |
66 | */ | 66 | */ |
67 | qDebug( "Opening %s",dspstr); | 67 | qDebug( "Opening %s",dspstr); |
68 | if (( sd = ::open( dspstr, flags)) == -1) { | 68 | if (( sd = ::open( dspstr, flags)) == -1) { |
69 | perror("open(\"/dev/dsp\")"); | 69 | perror("open(\"/dev/dsp\")"); |
70 | QString errorMsg="Could not open audio device\n /dev/dsp\n" | 70 | QString errorMsg="Could not open audio device\n /dev/dsp\n" |
71 | +(QString)strerror(errno); | 71 | +(QString)strerror(errno); |
72 | qDebug( "XXXXXXXXXXXXXXXXXXXXXXX "+errorMsg ); | 72 | qDebug( "XXXXXXXXXXXXXXXXXXXXXXX "+errorMsg ); |
73 | return -1; | 73 | return -1; |
74 | } | 74 | } |
75 | 75 | ||
76 | qDebug( "Opening mixer" ); | 76 | qDebug( "Opening mixer" ); |
77 | int mixerHandle=0; | 77 | int mixerHandle=0; |
78 | #ifdef QT_QWS_DEVFS | ||
79 | if (( mixerHandle = open("/dev/sound/mixer",O_RDWR))<0) { | ||
80 | #else | ||
78 | if (( mixerHandle = open("/dev/mixer",O_RDWR))<0) { | 81 | if (( mixerHandle = open("/dev/mixer",O_RDWR))<0) { |
82 | #endif | ||
79 | perror("open(\"/dev/mixer\")"); | 83 | perror("open(\"/dev/mixer\")"); |
80 | QString errorMsg="Could not open audio device\n /dev/dsp\n" | 84 | QString errorMsg="Could not open audio device\n /dev/dsp\n" |
81 | +(QString)strerror(errno); | 85 | +(QString)strerror(errno); |
82 | qDebug( "XXXXXXXXXXXXXXXXXXXXXX "+errorMsg ); | 86 | qDebug( "XXXXXXXXXXXXXXXXXXXXXX "+errorMsg ); |
83 | } | 87 | } |
84 | 88 | ||
85 | if(ioctl(sd,SNDCTL_DSP_RESET,0)<0){ | 89 | if(ioctl(sd,SNDCTL_DSP_RESET,0)<0){ |
86 | perror("ioctl RESET"); | 90 | perror("ioctl RESET"); |
87 | } | 91 | } |
88 | // sprintf(message, "%d", sd); | 92 | // sprintf(message, "%d", sd); |
89 | 93 | ||
90 | /* QFile f1("/pid"); | 94 | /* QFile f1("/pid"); |
91 | f1.open(IO_WriteOnly ); | 95 | f1.open(IO_WriteOnly ); |
92 | f1.writeBlock(message, strlen(message)); | 96 | f1.writeBlock(message, strlen(message)); |
93 | f1.close(); | 97 | f1.close(); |
94 | */ | 98 | */ |
95 | /* close(pipefd[0]); | 99 | /* close(pipefd[0]); |
96 | write(pipefd[1], message, sizeof(message)); | 100 | write(pipefd[1], message, sizeof(message)); |
97 | close(pipefd[1]); | 101 | close(pipefd[1]); |
98 | // qDebug( "" + soundDevice->sd ); | 102 | // qDebug( "" + soundDevice->sd ); |
99 | _exit(0); | 103 | _exit(0); |
100 | } | 104 | } |
101 | default: | 105 | default: |
102 | // pid greater than zero is parent getting the child's pid | 106 | // pid greater than zero is parent getting the child's pid |
103 | printf("Child's pid is %d\n",pid); | 107 | printf("Child's pid is %d\n",pid); |
104 | QString s; | 108 | QString s; |
105 | close(pipefd[1]); | 109 | close(pipefd[1]); |
106 | read(pipefd[0], message, sizeof(message)); | 110 | read(pipefd[0], message, sizeof(message)); |
107 | s = message; | 111 | s = message; |
108 | close(pipefd[0]); | 112 | close(pipefd[0]); |
109 | 113 | ||
110 | // while(wait(NULL)!=pid) | 114 | // while(wait(NULL)!=pid) |
111 | // ; | 115 | // ; |
112 | printf("child %ld terminated normally, return status is zero\n", (long) pid); | 116 | printf("child %ld terminated normally, return status is zero\n", (long) pid); |
113 | */ | 117 | */ |
114 | // filePara.sd=(long) pid; | 118 | // filePara.sd=(long) pid; |
115 | /* QFile f2("/pid"); | 119 | /* QFile f2("/pid"); |
116 | f2.open(IO_ReadOnly); | 120 | f2.open(IO_ReadOnly); |
117 | QTextStream t(&f2); | 121 | QTextStream t(&f2); |
118 | // for(int f=0; f < t.atEnd() ;f++) { | 122 | // for(int f=0; f < t.atEnd() ;f++) { |
119 | s = t.readLine(); | 123 | s = t.readLine(); |
120 | // } | 124 | // } |
121 | */ | 125 | */ |
122 | // bool ok; | 126 | // bool ok; |
123 | // sd = s.toInt(&ok, 10); | 127 | // sd = s.toInt(&ok, 10); |
124 | // qDebug( "<<<<<<<<<<<<<>>>>>>>>>>>>"+s ); | 128 | // qDebug( "<<<<<<<<<<<<<>>>>>>>>>>>>"+s ); |
125 | 129 | ||
126 | // f2.close(); | 130 | // f2.close(); |
127 | // } | 131 | // } |
128 | ::close(mixerHandle ); | 132 | ::close(mixerHandle ); |
129 | // qDebug( "open device " + dspstr ); | 133 | // qDebug( "open device " + dspstr ); |
130 | // qDebug( "success! " + sd ); | 134 | // qDebug( "success! " + sd ); |
131 | return sd; | 135 | return sd; |
132 | } | 136 | } |
133 | 137 | ||
134 | 138 | ||
135 | int Device::getOutVolume( ) { | 139 | int Device::getOutVolume( ) { |
136 | unsigned int volume; | 140 | unsigned int volume; |
137 | int mixerHandle = open( mixstr, O_RDWR ); | 141 | int mixerHandle = open( mixstr, O_RDWR ); |
138 | if ( mixerHandle >= 0 ) { | 142 | if ( mixerHandle >= 0 ) { |
139 | if(ioctl( mixerHandle, MIXER_READ(SOUND_MIXER_VOLUME), &volume )==-1) | 143 | if(ioctl( mixerHandle, MIXER_READ(SOUND_MIXER_VOLUME), &volume )==-1) |
140 | perror("<<<<<<<<<<<<<<ioctl(\"MIXER_READ\")"); | 144 | perror("<<<<<<<<<<<<<<ioctl(\"MIXER_READ\")"); |
141 | ::close( mixerHandle ); | 145 | ::close( mixerHandle ); |
142 | } else | 146 | } else |
143 | perror("open(\"/dev/mixer\")"); | 147 | perror("open(\"/dev/mixer\")"); |
144 | printf("<<<<<<<<<<<<<<<<<<<<output volume %d\n",volume); | 148 | printf("<<<<<<<<<<<<<<<<<<<<output volume %d\n",volume); |
145 | 149 | ||
146 | Config cfg("qpe"); | 150 | Config cfg("qpe"); |
147 | cfg.setGroup("Volume"); | 151 | cfg.setGroup("Volume"); |
148 | 152 | ||
149 | return cfg.readNumEntry("VolumePercent"); | 153 | return cfg.readNumEntry("VolumePercent"); |
150 | } | 154 | } |
151 | 155 | ||
152 | int Device::getInVolume() { | 156 | int Device::getInVolume() { |
153 | unsigned int volume=0; | 157 | unsigned int volume=0; |
154 | int mixerHandle = ::open( mixstr, O_RDWR ); | 158 | int mixerHandle = ::open( mixstr, O_RDWR ); |
155 | if ( mixerHandle >= 0 ) { | 159 | if ( mixerHandle >= 0 ) { |
156 | if(ioctl( mixerHandle, MIXER_READ(SOUND_MIXER_MIC), &volume )==-1) | 160 | if(ioctl( mixerHandle, MIXER_READ(SOUND_MIXER_MIC), &volume )==-1) |
157 | perror("<<<<<<<<<<<<<<<ioctl(\"MIXER_READ\")"); | 161 | perror("<<<<<<<<<<<<<<<ioctl(\"MIXER_READ\")"); |
158 | ::close( mixerHandle ); | 162 | ::close( mixerHandle ); |
159 | } else | 163 | } else |
160 | perror("open(\"/dev/mixer\")"); | 164 | perror("open(\"/dev/mixer\")"); |
161 | printf("<<<<<<<<<<<<<<input volume %d\n", volume ); | 165 | printf("<<<<<<<<<<<<<<input volume %d\n", volume ); |
162 | Config cfg("qpe"); | 166 | Config cfg("qpe"); |
163 | cfg.setGroup("Volume"); | 167 | cfg.setGroup("Volume"); |
164 | 168 | ||
165 | return cfg.readNumEntry("Mic"); | 169 | return cfg.readNumEntry("Mic"); |
166 | } | 170 | } |
167 | 171 | ||
168 | void Device::changedOutVolume(int vol) { | 172 | void Device::changedOutVolume(int vol) { |
169 | int level = (vol << 8) + vol; | 173 | int level = (vol << 8) + vol; |
170 | int fd = 0; | 174 | int fd = 0; |
175 | #ifdef QT_QWS_DEVFS | ||
176 | if ((fd = open("/dev/sound/mixer", O_RDWR))>=0) { | ||
177 | #else | ||
171 | if ((fd = open("/dev/mixer", O_RDWR))>=0) { | 178 | if ((fd = open("/dev/mixer", O_RDWR))>=0) { |
179 | #endif | ||
172 | if(ioctl(fd, MIXER_WRITE(SOUND_MIXER_VOLUME), &level) == -1) | 180 | if(ioctl(fd, MIXER_WRITE(SOUND_MIXER_VOLUME), &level) == -1) |
173 | perror("ioctl(\"MIXER_IN_WRITE\")"); | 181 | perror("ioctl(\"MIXER_IN_WRITE\")"); |
174 | 182 | ||
175 | Config cfg("qpe"); | 183 | Config cfg("qpe"); |
176 | cfg.setGroup("Volume"); | 184 | cfg.setGroup("Volume"); |
177 | cfg.writeEntry("VolumePercent", QString::number( vol )); | 185 | cfg.writeEntry("VolumePercent", QString::number( vol )); |
178 | QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << false; | 186 | QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << false; |
179 | qDebug("changing output vol %d" ,vol ); | 187 | qDebug("changing output vol %d" ,vol ); |
180 | } | 188 | } |
181 | ::close(fd); | 189 | ::close(fd); |
182 | } | 190 | } |
183 | 191 | ||
184 | void Device::changedInVolume(int vol ) { | 192 | void Device::changedInVolume(int vol ) { |
185 | int level = (vol << 8) + vol; | 193 | int level = (vol << 8) + vol; |
186 | int fd = 0; | 194 | int fd = 0; |
195 | #ifdef QT_QWS_DEVFS | ||
196 | if ((fd = open("/dev/sound/mixer", O_RDWR))>=0) { | ||
197 | #else | ||
187 | if ((fd = open("/dev/mixer", O_RDWR))>=0) { | 198 | if ((fd = open("/dev/mixer", O_RDWR))>=0) { |
199 | #endif | ||
188 | if(ioctl(fd, MIXER_WRITE(SOUND_MIXER_MIC), &level) == -1) | 200 | if(ioctl(fd, MIXER_WRITE(SOUND_MIXER_MIC), &level) == -1) |
189 | perror("ioctl(\"MIXER_IN_WRITE\")"); | 201 | perror("ioctl(\"MIXER_IN_WRITE\")"); |
190 | Config cfg("qpe"); | 202 | Config cfg("qpe"); |
191 | cfg.setGroup("Volume"); | 203 | cfg.setGroup("Volume"); |
192 | cfg.writeEntry("Mic", QString::number(vol )); | 204 | cfg.writeEntry("Mic", QString::number(vol )); |
193 | QCopEnvelope( "QPE/System", "micChange(bool)" ) << false; | 205 | QCopEnvelope( "QPE/System", "micChange(bool)" ) << false; |
194 | qDebug("changing input volume %d",vol); | 206 | qDebug("changing input volume %d",vol); |
195 | } | 207 | } |
196 | ::close(fd); | 208 | ::close(fd); |
197 | } | 209 | } |
198 | 210 | ||
199 | bool Device::selectMicInput() { | 211 | bool Device::selectMicInput() { |
200 | 212 | ||
201 | int md=0; | 213 | int md=0; |
202 | int info=MIXER_WRITE(SOUND_MIXER_MIC); | 214 | int info=MIXER_WRITE(SOUND_MIXER_MIC); |
215 | #ifdef QT_QWS_DEVFS | ||
216 | md = ::open( "/dev/sound/mixer", O_RDWR ); | ||
217 | #else | ||
203 | md = ::open( "/dev/mixer", O_RDWR ); | 218 | md = ::open( "/dev/mixer", O_RDWR ); |
219 | #endif | ||
204 | if ( md == -1) | 220 | if ( md == -1) |
205 | perror("open(\"/dev/mixer\")"); | 221 | perror("open(\"/dev/mixer\")"); |
206 | else { | 222 | else { |
207 | if( ioctl( md, SOUND_MIXER_WRITE_RECSRC, &info) == -1) | 223 | if( ioctl( md, SOUND_MIXER_WRITE_RECSRC, &info) == -1) |
208 | perror("ioctl(\"SOUND_MIXER_WRITE_RECSRC\")"); | 224 | perror("ioctl(\"SOUND_MIXER_WRITE_RECSRC\")"); |
209 | ::close(md); | 225 | ::close(md); |
210 | return false; | 226 | return false; |
211 | } | 227 | } |
212 | ::close(md); | 228 | ::close(md); |
213 | 229 | ||
214 | return true; | 230 | return true; |
215 | } | 231 | } |
216 | 232 | ||
217 | bool Device::closeDevice( bool) { | 233 | bool Device::closeDevice( bool) { |
218 | // if(b) {//close now | 234 | // if(b) {//close now |
219 | // if (ioctl( sd, SNDCTL_DSP_RESET, 0) == -1) { | 235 | // if (ioctl( sd, SNDCTL_DSP_RESET, 0) == -1) { |
220 | // perror("ioctl(\"SNDCTL_DSP_RESET\")"); | 236 | // perror("ioctl(\"SNDCTL_DSP_RESET\")"); |
221 | // } | 237 | // } |
222 | // } else { //let play | 238 | // } else { //let play |
223 | // if (ioctl( sd, SNDCTL_DSP_SYNC, 0) == -1) { | 239 | // if (ioctl( sd, SNDCTL_DSP_SYNC, 0) == -1) { |
224 | // perror("ioctl(\"SNDCTL_DSP_SYNC\")"); | 240 | // perror("ioctl(\"SNDCTL_DSP_SYNC\")"); |
225 | // } | 241 | // } |
226 | // } | 242 | // } |
227 | 243 | ||
228 | ::close( sd); //close sound device | 244 | ::close( sd); //close sound device |
229 | // sdfd=0; | 245 | // sdfd=0; |
230 | // sd=0; | 246 | // sd=0; |
231 | // qDebug( "closed dsp" ); | 247 | // qDebug( "closed dsp" ); |
232 | return true; | 248 | return true; |
233 | } | 249 | } |
234 | 250 | ||
235 | bool Device::setDeviceFormat( int form) { | 251 | bool Device::setDeviceFormat( int form) { |
236 | qDebug( "set device res %d: %d ",form, sd ); | 252 | qDebug( "set device res %d: %d ",form, sd ); |
237 | if (ioctl( sd, SNDCTL_DSP_SETFMT, &form)==-1) { //set format | 253 | if (ioctl( sd, SNDCTL_DSP_SETFMT, &form)==-1) { //set format |
238 | perror("ioctl(\"SNDCTL_DSP_SETFMT\")"); | 254 | perror("ioctl(\"SNDCTL_DSP_SETFMT\")"); |
239 | return false; | 255 | return false; |
240 | } | 256 | } |
241 | devRes=form; | 257 | devRes=form; |
242 | return true; | 258 | return true; |
243 | } | 259 | } |
244 | 260 | ||
245 | bool Device::setDeviceChannels( int ch) { | 261 | bool Device::setDeviceChannels( int ch) { |
246 | qDebug( "set channels %d: %d",ch ,sd); | 262 | qDebug( "set channels %d: %d",ch ,sd); |
247 | if (ioctl( sd, SNDCTL_DSP_CHANNELS, &ch)==-1) { | 263 | if (ioctl( sd, SNDCTL_DSP_CHANNELS, &ch)==-1) { |
248 | perror("ioctl(\"SNDCTL_DSP_CHANNELS\")"); | 264 | perror("ioctl(\"SNDCTL_DSP_CHANNELS\")"); |
249 | return false; | 265 | return false; |
250 | } | 266 | } |
251 | devCh=ch; | 267 | devCh=ch; |
252 | return true; | 268 | return true; |
253 | } | 269 | } |
254 | 270 | ||
255 | bool Device::setDeviceRate( int rate) { | 271 | bool Device::setDeviceRate( int rate) { |
256 | qDebug( "set rate %d: %d",rate,sd); | 272 | qDebug( "set rate %d: %d",rate,sd); |
257 | if (ioctl( sd, SNDCTL_DSP_SPEED, &rate) == -1) { | 273 | if (ioctl( sd, SNDCTL_DSP_SPEED, &rate) == -1) { |
258 | perror("ioctl(\"SNDCTL_DSP_SPEED\")"); | 274 | perror("ioctl(\"SNDCTL_DSP_SPEED\")"); |
259 | return false; | 275 | return false; |
260 | } | 276 | } |
261 | 277 | ||
262 | devRate=rate; | 278 | devRate=rate; |
263 | 279 | ||
264 | return true; | 280 | return true; |
265 | } | 281 | } |
266 | 282 | ||
267 | int Device::getRes() { | 283 | int Device::getRes() { |
268 | return devRes; | 284 | return devRes; |
269 | } | 285 | } |
270 | 286 | ||
271 | int Device::getFormat() { | 287 | int Device::getFormat() { |
272 | return devForm; | 288 | return devForm; |
273 | } | 289 | } |
274 | 290 | ||
275 | int Device::getRate() { | 291 | int Device::getRate() { |
276 | return devRate; | 292 | return devRate; |
277 | } | 293 | } |
278 | 294 | ||
279 | int Device::getChannels() { | 295 | int Device::getChannels() { |
280 | return devCh; | 296 | return devCh; |
281 | } | 297 | } |
282 | 298 | ||
283 | int Device::getDeviceFormat() { | 299 | int Device::getDeviceFormat() { |
284 | return 0; | 300 | return 0; |
285 | } | 301 | } |
286 | 302 | ||
287 | 303 | ||
288 | int Device::getDeviceRate() { | 304 | int Device::getDeviceRate() { |
289 | int dRate=0; | 305 | int dRate=0; |
290 | if (ioctl( sd, SOUND_PCM_READ_RATE, &dRate) == -1) { | 306 | if (ioctl( sd, SOUND_PCM_READ_RATE, &dRate) == -1) { |
291 | perror("ioctl(\"SNDCTL_PCM_READ_RATE\")"); | 307 | perror("ioctl(\"SNDCTL_PCM_READ_RATE\")"); |
292 | } | 308 | } |
293 | return dRate; | 309 | return dRate; |
294 | 310 | ||
295 | } | 311 | } |
296 | 312 | ||
297 | int Device::getDeviceBits() { | 313 | int Device::getDeviceBits() { |
298 | int dBits=0; | 314 | int dBits=0; |
299 | #ifndef QT_QWS_EBX // zaurus doesnt have this | 315 | #ifndef QT_QWS_EBX // zaurus doesnt have this |
300 | if (ioctl( sd, SOUND_PCM_READ_BITS, &dBits) == -1) { | 316 | if (ioctl( sd, SOUND_PCM_READ_BITS, &dBits) == -1) { |
301 | perror("ioctl(\"SNDCTL_PCM_READ_BITS\")"); | 317 | perror("ioctl(\"SNDCTL_PCM_READ_BITS\")"); |
302 | } | 318 | } |
303 | #endif | 319 | #endif |
304 | return dBits; | 320 | return dBits; |
305 | } | 321 | } |
306 | 322 | ||
307 | int Device::getDeviceChannels() { | 323 | int Device::getDeviceChannels() { |
308 | int dCh=0; | 324 | int dCh=0; |
309 | if (ioctl( sd, SOUND_PCM_READ_CHANNELS, &dCh) == -1) { | 325 | if (ioctl( sd, SOUND_PCM_READ_CHANNELS, &dCh) == -1) { |
310 | perror("ioctl(\"SNDCTL_PCM_READ_CHANNELS\")"); | 326 | perror("ioctl(\"SNDCTL_PCM_READ_CHANNELS\")"); |
311 | } | 327 | } |
312 | return dCh; | 328 | return dCh; |
313 | } | 329 | } |
314 | 330 | ||
315 | int Device::getDeviceFragSize() { | 331 | int Device::getDeviceFragSize() { |
316 | int frag_size; | 332 | int frag_size; |
317 | 333 | ||
318 | if (ioctl( sd, SNDCTL_DSP_GETBLKSIZE, &frag_size) == -1) { | 334 | if (ioctl( sd, SNDCTL_DSP_GETBLKSIZE, &frag_size) == -1) { |
319 | qDebug( "no fragsize" ); | 335 | qDebug( "no fragsize" ); |
320 | } else { | 336 | } else { |
321 | qDebug( "driver says frag size is %d",frag_size); | 337 | qDebug( "driver says frag size is %d",frag_size); |
322 | } | 338 | } |
323 | return frag_size; | 339 | return frag_size; |
324 | } | 340 | } |
325 | 341 | ||
326 | bool Device::setFragSize(int frag) { | 342 | bool Device::setFragSize(int frag) { |
327 | if (ioctl(sd, SNDCTL_DSP_SETFRAGMENT, &frag)) { | 343 | if (ioctl(sd, SNDCTL_DSP_SETFRAGMENT, &frag)) { |
328 | perror("ioctl(\"SNDCTL_DSP_SETFRAGMENT\")"); | 344 | perror("ioctl(\"SNDCTL_DSP_SETFRAGMENT\")"); |
329 | return false; | 345 | return false; |
330 | } | 346 | } |
331 | return true; | 347 | return true; |
332 | } | 348 | } |
333 | 349 | ||
334 | bool Device::reset() { | 350 | bool Device::reset() { |
335 | closeDevice(true); | 351 | closeDevice(true); |
336 | openDsp(); | 352 | openDsp(); |
337 | if (ioctl( sd, SNDCTL_DSP_RESET, 0) == -1) { | 353 | if (ioctl( sd, SNDCTL_DSP_RESET, 0) == -1) { |
338 | perror("ioctl(\"SNDCTL_DSP_RESET\")"); | 354 | perror("ioctl(\"SNDCTL_DSP_RESET\")"); |
339 | return false; | 355 | return false; |
340 | } | 356 | } |
341 | return true; | 357 | return true; |
342 | } | 358 | } |
343 | 359 | ||
344 | int Device::devRead(int soundDescriptor, short *buf, int size) { | 360 | int Device::devRead(int soundDescriptor, short *buf, int size) { |
345 | Q_UNUSED(soundDescriptor); | 361 | Q_UNUSED(soundDescriptor); |
346 | int number = 0; | 362 | int number = 0; |
347 | number = ::read( sd /*soundDescriptor*/, (char *)buf, size); | 363 | number = ::read( sd /*soundDescriptor*/, (char *)buf, size); |
348 | return number; | 364 | return number; |
349 | } | 365 | } |
350 | 366 | ||
351 | int Device::devWrite(int soundDescriptor, short * buf, int size) { | 367 | int Device::devWrite(int soundDescriptor, short * buf, int size) { |
352 | Q_UNUSED(soundDescriptor); | 368 | Q_UNUSED(soundDescriptor); |
353 | int bytesWritten = 0; | 369 | int bytesWritten = 0; |
354 | bytesWritten = ::write( sd /*soundDescriptor*/, buf, size); | 370 | bytesWritten = ::write( sd /*soundDescriptor*/, buf, size); |
355 | return bytesWritten; | 371 | return bytesWritten; |
356 | } | 372 | } |
357 | 373 | ||
358 | 374 | ||
diff --git a/noncore/multimedia/opierec/qtrec.cpp b/noncore/multimedia/opierec/qtrec.cpp index 1141faa..c237726 100644 --- a/noncore/multimedia/opierec/qtrec.cpp +++ b/noncore/multimedia/opierec/qtrec.cpp | |||
@@ -1,1109 +1,1116 @@ | |||
1 | /**************************************************************************** | 1 | /**************************************************************************** |
2 | // qtrec.cpp | 2 | // qtrec.cpp |
3 | Created: Thu Jan 17 11:19:58 2002 | 3 | Created: Thu Jan 17 11:19:58 2002 |
4 | copyright 2002 by L.J. Potter <ljp@llornkcor.com> | 4 | copyright 2002 by L.J. Potter <ljp@llornkcor.com> |
5 | ****************************************************************************/ | 5 | ****************************************************************************/ |
6 | #define DEV_VERSION | 6 | #define DEV_VERSION |
7 | 7 | ||
8 | #include "pixmaps.h" | 8 | #include "pixmaps.h" |
9 | #include "qtrec.h" | 9 | #include "qtrec.h" |
10 | #include "waveform.h" | 10 | #include "waveform.h" |
11 | extern "C" { | 11 | extern "C" { |
12 | #include "adpcm.h" | 12 | #include "adpcm.h" |
13 | } | 13 | } |
14 | 14 | ||
15 | /* OPIE */ | 15 | /* OPIE */ |
16 | #include <opie2/odebug.h> | 16 | #include <opie2/odebug.h> |
17 | #include <qpe/config.h> | 17 | #include <qpe/config.h> |
18 | #include <qpe/qcopenvelope_qws.h> | 18 | #include <qpe/qcopenvelope_qws.h> |
19 | #include <qpe/qpeapplication.h> | 19 | #include <qpe/qpeapplication.h> |
20 | #include <qpe/resource.h> | 20 | #include <qpe/resource.h> |
21 | #include <qpe/storage.h> | 21 | #include <qpe/storage.h> |
22 | using namespace Opie::Core; | 22 | using namespace Opie::Core; |
23 | 23 | ||
24 | /* QT */ | 24 | /* QT */ |
25 | #include <qcheckbox.h> | 25 | #include <qcheckbox.h> |
26 | #include <qcombobox.h> | 26 | #include <qcombobox.h> |
27 | #include <qdir.h> | 27 | #include <qdir.h> |
28 | #include <qgroupbox.h> | 28 | #include <qgroupbox.h> |
29 | #include <qlabel.h> | 29 | #include <qlabel.h> |
30 | #include <qlayout.h> | 30 | #include <qlayout.h> |
31 | #include <qlistview.h> | 31 | #include <qlistview.h> |
32 | #include <qmessagebox.h> | 32 | #include <qmessagebox.h> |
33 | #include <qpopupmenu.h> | 33 | #include <qpopupmenu.h> |
34 | #include <qpushbutton.h> | 34 | #include <qpushbutton.h> |
35 | #include <qslider.h> | 35 | #include <qslider.h> |
36 | #include <qtabwidget.h> | 36 | #include <qtabwidget.h> |
37 | #include <qtimer.h> | 37 | #include <qtimer.h> |
38 | 38 | ||
39 | /* STD */ | 39 | /* STD */ |
40 | #include <errno.h> | 40 | #include <errno.h> |
41 | #include <fcntl.h> | 41 | #include <fcntl.h> |
42 | #include <math.h> | 42 | #include <math.h> |
43 | #include <mntent.h> | 43 | #include <mntent.h> |
44 | #include <stdio.h> | 44 | #include <stdio.h> |
45 | #include <stdlib.h> | 45 | #include <stdlib.h> |
46 | #include <sys/ioctl.h> | 46 | #include <sys/ioctl.h> |
47 | #include <sys/soundcard.h> | 47 | #include <sys/soundcard.h> |
48 | #include <sys/stat.h> | 48 | #include <sys/stat.h> |
49 | #include <sys/time.h> | 49 | #include <sys/time.h> |
50 | #include <sys/types.h> | 50 | #include <sys/types.h> |
51 | #include <sys/vfs.h> | 51 | #include <sys/vfs.h> |
52 | #include <unistd.h> | 52 | #include <unistd.h> |
53 | #include <sys/wait.h> | 53 | #include <sys/wait.h> |
54 | #include <sys/signal.h> | 54 | #include <sys/signal.h> |
55 | #include <pthread.h> | 55 | #include <pthread.h> |
56 | 56 | ||
57 | #ifdef PDAUDIO //ALSA | 57 | #ifdef PDAUDIO //ALSA |
58 | #include <alsa/asoundlib.h> | 58 | #include <alsa/asoundlib.h> |
59 | static int deviceSampleRates[8] = { 32000, 44100, 48000, 88200, 96000, 176400, 192000, -1 }; | 59 | static int deviceSampleRates[8] = { 32000, 44100, 48000, 88200, 96000, 176400, 192000, -1 }; |
60 | static int deviceBitRates[] = { 8, 16, 24, 32, -1 }; | 60 | static int deviceBitRates[] = { 8, 16, 24, 32, -1 }; |
61 | #else //OSS | 61 | #else //OSS |
62 | static int deviceSampleRates[6] = { 11025, 16000, 22050, 32000, 44100, -1 }; | 62 | static int deviceSampleRates[6] = { 11025, 16000, 22050, 32000, 44100, -1 }; |
63 | static int deviceBitRates[] = { 8, 16, -1 }; | 63 | static int deviceBitRates[] = { 8, 16, -1 }; |
64 | #endif | 64 | #endif |
65 | 65 | ||
66 | #if defined(QT_QWS_SL5XXX) | 66 | #if defined(QT_QWS_SL5XXX) |
67 | ///#if defined(QT_QWS_EBX) | 67 | ///#if defined(QT_QWS_EBX) |
68 | 68 | ||
69 | #define DSPSTROUT "/dev/dsp" | 69 | #define DSPSTROUT "/dev/dsp" |
70 | #define DSPSTRMIXEROUT "/dev/mixer" | 70 | #define DSPSTRMIXEROUT "/dev/mixer" |
71 | 71 | ||
72 | #ifdef SHARP | 72 | #ifdef SHARP |
73 | #define DSPSTRIN "/dev/dsp1" | 73 | #define DSPSTRIN "/dev/dsp1" |
74 | #define DSPSTRMIXERIN "/dev/mixer1" | 74 | #define DSPSTRMIXERIN "/dev/mixer1" |
75 | #else | 75 | #else |
76 | #define DSPSTRIN "/dev/dsp" | 76 | #define DSPSTRIN "/dev/dsp" |
77 | #define DSPSTRMIXERIN "/dev/mixer" | 77 | #define DSPSTRMIXERIN "/dev/mixer" |
78 | #endif | 78 | #endif |
79 | 79 | ||
80 | #else | 80 | #else |
81 | 81 | ||
82 | #ifdef QT_QWS_DEVFS | ||
83 | #define DSPSTROUT "/dev/sound/dsp" | ||
84 | #define DSPSTRIN "/dev/sound/dsp" | ||
85 | #define DSPSTRMIXERIN "/dev/sound/mixer" | ||
86 | #define DSPSTRMIXEROUT "/dev/sound/mixer" | ||
87 | #else | ||
82 | #define DSPSTROUT "/dev/dsp" | 88 | #define DSPSTROUT "/dev/dsp" |
83 | #define DSPSTRIN "/dev/dsp" | 89 | #define DSPSTRIN "/dev/dsp" |
84 | #define DSPSTRMIXERIN "/dev/mixer" | 90 | #define DSPSTRMIXERIN "/dev/mixer" |
85 | #define DSPSTRMIXEROUT "/dev/mixer" | 91 | #define DSPSTRMIXEROUT "/dev/mixer" |
92 | #endif | ||
86 | 93 | ||
87 | #endif | 94 | #endif |
88 | 95 | ||
89 | //#define ZAURUS 0 | 96 | //#define ZAURUS 0 |
90 | struct adpcm_state encoder_state; | 97 | struct adpcm_state encoder_state; |
91 | struct adpcm_state decoder_state; | 98 | struct adpcm_state decoder_state; |
92 | 99 | ||
93 | typedef struct { | 100 | typedef struct { |
94 | int sampleRate; | 101 | int sampleRate; |
95 | /* int fragSize; */ | 102 | /* int fragSize; */ |
96 | /* int blockSize; */ | 103 | /* int blockSize; */ |
97 | int resolution; //bitrate | 104 | int resolution; //bitrate |
98 | int channels; //number of channels | 105 | int channels; //number of channels |
99 | int fd; //file descriptor | 106 | int fd; //file descriptor |
100 | int sd; //sound device descriptor | 107 | int sd; //sound device descriptor |
101 | int numberSamples; //total number of samples | 108 | int numberSamples; //total number of samples |
102 | int SecondsToRecord; // number of seconds that should be recorded | 109 | int SecondsToRecord; // number of seconds that should be recorded |
103 | float numberOfRecordedSeconds; //total number of samples recorded | 110 | float numberOfRecordedSeconds; //total number of samples recorded |
104 | int samplesToRecord; //number of samples to be recorded | 111 | int samplesToRecord; //number of samples to be recorded |
105 | int inVol; //input volume | 112 | int inVol; //input volume |
106 | int outVol; //output volume | 113 | int outVol; //output volume |
107 | int format; //wavfile format PCM.. ADPCM | 114 | int format; //wavfile format PCM.. ADPCM |
108 | const char *fileName; //name of fiel to be played/recorded | 115 | const char *fileName; //name of fiel to be played/recorded |
109 | } fileParameters; | 116 | } fileParameters; |
110 | 117 | ||
111 | fileParameters filePara; | 118 | fileParameters filePara; |
112 | 119 | ||
113 | bool monitoring, recording, playing; | 120 | bool monitoring, recording, playing; |
114 | bool stopped; | 121 | bool stopped; |
115 | QLabel *timeLabel; | 122 | QLabel *timeLabel; |
116 | QSlider *timeSlider; | 123 | QSlider *timeSlider; |
117 | int sd; | 124 | int sd; |
118 | 125 | ||
119 | Waveform* waveform; | 126 | Waveform* waveform; |
120 | Device *soundDevice; | 127 | Device *soundDevice; |
121 | 128 | ||
122 | 129 | ||
123 | #ifdef THREADED | 130 | #ifdef THREADED |
124 | void quickRec() | 131 | void quickRec() |
125 | #else | 132 | #else |
126 | void QtRec::quickRec() | 133 | void QtRec::quickRec() |
127 | #endif | 134 | #endif |
128 | { | 135 | { |
129 | 136 | ||
130 | odebug << ( filePara.numberSamples/filePara.sampleRate * filePara.channels ) << oendl; | 137 | odebug << ( filePara.numberSamples/filePara.sampleRate * filePara.channels ) << oendl; |
131 | odebug << "samples " << filePara.numberSamples << ", rate " << filePara.sampleRate | 138 | odebug << "samples " << filePara.numberSamples << ", rate " << filePara.sampleRate |
132 | << ", channels " << filePara.channels << oendl; | 139 | << ", channels " << filePara.channels << oendl; |
133 | 140 | ||
134 | int total = 0; // Total number of bytes read in so far. | 141 | int total = 0; // Total number of bytes read in so far. |
135 | int bytesWritten, number; | 142 | int bytesWritten, number; |
136 | 143 | ||
137 | bytesWritten = 0; | 144 | bytesWritten = 0; |
138 | number = 0; | 145 | number = 0; |
139 | QString num; | 146 | QString num; |
140 | int level = 0; | 147 | int level = 0; |
141 | int threshold = 0; | 148 | int threshold = 0; |
142 | int bits = filePara.resolution; | 149 | int bits = filePara.resolution; |
143 | odebug << "bits " << bits << "" << oendl; | 150 | odebug << "bits " << bits << "" << oendl; |
144 | 151 | ||
145 | if( filePara.resolution == 16 ) { //AFMT_S16_LE) | 152 | if( filePara.resolution == 16 ) { //AFMT_S16_LE) |
146 | odebug << "AFMT_S16_LE size " << filePara.SecondsToRecord << "" << oendl; | 153 | odebug << "AFMT_S16_LE size " << filePara.SecondsToRecord << "" << oendl; |
147 | odebug << "samples to record " << filePara.samplesToRecord << "" << oendl; | 154 | odebug << "samples to record " << filePara.samplesToRecord << "" << oendl; |
148 | odebug << "" << filePara.sd << "" << oendl; | 155 | odebug << "" << filePara.sd << "" << oendl; |
149 | level = 7; | 156 | level = 7; |
150 | threshold = 0; | 157 | threshold = 0; |
151 | 158 | ||
152 | if( filePara.format == WAVE_FORMAT_DVI_ADPCM) { | 159 | if( filePara.format == WAVE_FORMAT_DVI_ADPCM) { |
153 | odebug << "start recording WAVE_FORMAT_DVI_ADPCM" << oendl; | 160 | odebug << "start recording WAVE_FORMAT_DVI_ADPCM" << oendl; |
154 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> | 161 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> |
155 | char abuf[ BUFSIZE/2 ]; | 162 | char abuf[ BUFSIZE/2 ]; |
156 | short sbuf[ BUFSIZE ]; | 163 | short sbuf[ BUFSIZE ]; |
157 | short sbuf2[ BUFSIZE ]; | 164 | short sbuf2[ BUFSIZE ]; |
158 | memset( abuf, 0, BUFSIZE/2); | 165 | memset( abuf, 0, BUFSIZE/2); |
159 | memset( sbuf, 0, BUFSIZE); | 166 | memset( sbuf, 0, BUFSIZE); |
160 | memset( sbuf2, 0, BUFSIZE); | 167 | memset( sbuf2, 0, BUFSIZE); |
161 | 168 | ||
162 | for(;;) { | 169 | for(;;) { |
163 | if ( stopped) { | 170 | if ( stopped) { |
164 | odebug << "quickRec:: stopped" << oendl; | 171 | odebug << "quickRec:: stopped" << oendl; |
165 | break; | 172 | break; |
166 | } | 173 | } |
167 | 174 | ||
168 | // number=::read( filePara.sd, sbuf, BUFSIZE); | 175 | // number=::read( filePara.sd, sbuf, BUFSIZE); |
169 | number = soundDevice->devRead( filePara.sd, sbuf, BUFSIZE); | 176 | number = soundDevice->devRead( filePara.sd, sbuf, BUFSIZE); |
170 | 177 | ||
171 | if(number <= 0) { | 178 | if(number <= 0) { |
172 | perror("recording error "); | 179 | perror("recording error "); |
173 | odebug << "" << filePara.fileName << " " << number << "" << oendl; | 180 | odebug << "" << filePara.fileName << " " << number << "" << oendl; |
174 | stopped = true; | 181 | stopped = true; |
175 | return; | 182 | return; |
176 | } | 183 | } |
177 | //if(stereo == 2) { | 184 | //if(stereo == 2) { |
178 | // adpcm_coder( sbuf2, abuf, number/2, &encoder_state); | 185 | // adpcm_coder( sbuf2, abuf, number/2, &encoder_state); |
179 | adpcm_coder( sbuf, abuf, number/2, &encoder_state); | 186 | adpcm_coder( sbuf, abuf, number/2, &encoder_state); |
180 | 187 | ||
181 | bytesWritten = ::write( filePara.fd , (short *)abuf, number/4); | 188 | bytesWritten = ::write( filePara.fd , (short *)abuf, number/4); |
182 | 189 | ||
183 | waveform->newSamples( sbuf, number ); | 190 | waveform->newSamples( sbuf, number ); |
184 | 191 | ||
185 | total += bytesWritten; | 192 | total += bytesWritten; |
186 | filePara.numberSamples = total; | 193 | filePara.numberSamples = total; |
187 | timeSlider->setValue( total); | 194 | timeSlider->setValue( total); |
188 | 195 | ||
189 | printf("%d, bytes %d,total %d\r",number, bytesWritten, total); | 196 | printf("%d, bytes %d,total %d\r",number, bytesWritten, total); |
190 | fflush(stdout); | 197 | fflush(stdout); |
191 | 198 | ||
192 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate * (float)2/ filePara.channels; | 199 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate * (float)2/ filePara.channels; |
193 | 200 | ||
194 | qApp->processEvents(); | 201 | qApp->processEvents(); |
195 | if( total >= filePara.samplesToRecord) { | 202 | if( total >= filePara.samplesToRecord) { |
196 | stopped = true; | 203 | stopped = true; |
197 | break; | 204 | break; |
198 | } | 205 | } |
199 | } | 206 | } |
200 | } else { | 207 | } else { |
201 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> | 208 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> |
202 | odebug << "start recording WAVE_FORMAT_PCM" << oendl; | 209 | odebug << "start recording WAVE_FORMAT_PCM" << oendl; |
203 | short inbuffer[ BUFSIZE ], outbuffer[ BUFSIZE ]; | 210 | short inbuffer[ BUFSIZE ], outbuffer[ BUFSIZE ]; |
204 | memset( inbuffer, 0, BUFSIZE); | 211 | memset( inbuffer, 0, BUFSIZE); |
205 | memset( outbuffer, 0, BUFSIZE); | 212 | memset( outbuffer, 0, BUFSIZE); |
206 | 213 | ||
207 | for(;;) { | 214 | for(;;) { |
208 | if ( stopped) { | 215 | if ( stopped) { |
209 | odebug << "quickRec:: stopped" << oendl; | 216 | odebug << "quickRec:: stopped" << oendl; |
210 | stopped = true; | 217 | stopped = true; |
211 | break; // stop if playing was set to false | 218 | break; // stop if playing was set to false |
212 | return; | 219 | return; |
213 | } | 220 | } |
214 | 221 | ||
215 | number = soundDevice->devRead( soundDevice->sd /*filePara.sd*/, (short *)inbuffer, BUFSIZE); | 222 | number = soundDevice->devRead( soundDevice->sd /*filePara.sd*/, (short *)inbuffer, BUFSIZE); |
216 | 223 | ||
217 | if( number <= 0) { | 224 | if( number <= 0) { |
218 | perror( "recording error "); | 225 | perror( "recording error "); |
219 | odebug << filePara.fileName << oendl; | 226 | odebug << filePara.fileName << oendl; |
220 | stopped = true; | 227 | stopped = true; |
221 | return; | 228 | return; |
222 | } | 229 | } |
223 | 230 | ||
224 | bytesWritten = ::write( filePara.fd , inbuffer, number); | 231 | bytesWritten = ::write( filePara.fd , inbuffer, number); |
225 | waveform->newSamples( inbuffer, number ); | 232 | waveform->newSamples( inbuffer, number ); |
226 | 233 | ||
227 | if( bytesWritten < 0) { | 234 | if( bytesWritten < 0) { |
228 | perror("File writing error "); | 235 | perror("File writing error "); |
229 | stopped = true; | 236 | stopped = true; |
230 | return; | 237 | return; |
231 | } | 238 | } |
232 | 239 | ||
233 | total += bytesWritten; | 240 | total += bytesWritten; |
234 | 241 | ||
235 | filePara.numberSamples = total; | 242 | filePara.numberSamples = total; |
236 | 243 | ||
237 | if( filePara.SecondsToRecord != 0) | 244 | if( filePara.SecondsToRecord != 0) |
238 | timeSlider->setValue( total); | 245 | timeSlider->setValue( total); |
239 | printf("%d, bytes %d,total %d\r",number, bytesWritten , total); | 246 | printf("%d, bytes %d,total %d\r",number, bytesWritten , total); |
240 | fflush(stdout); | 247 | fflush(stdout); |
241 | 248 | ||
242 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate | 249 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate |
243 | / (float)2/filePara.channels; | 250 | / (float)2/filePara.channels; |
244 | qApp->processEvents(); | 251 | qApp->processEvents(); |
245 | 252 | ||
246 | if( total >= filePara.samplesToRecord) { | 253 | if( total >= filePara.samplesToRecord) { |
247 | stopped = true; | 254 | stopped = true; |
248 | break; | 255 | break; |
249 | } | 256 | } |
250 | } | 257 | } |
251 | } //end main loop | 258 | } //end main loop |
252 | 259 | ||
253 | } else { | 260 | } else { |
254 | // <<<<<<<<<<<<<<<<<<<<<<< format = AFMT_U8; | 261 | // <<<<<<<<<<<<<<<<<<<<<<< format = AFMT_U8; |
255 | unsigned char unsigned_inbuffer[ BUFSIZE ], unsigned_outbuffer[ BUFSIZE ]; | 262 | unsigned char unsigned_inbuffer[ BUFSIZE ], unsigned_outbuffer[ BUFSIZE ]; |
256 | memset( unsigned_inbuffer, 0, BUFSIZE); | 263 | memset( unsigned_inbuffer, 0, BUFSIZE); |
257 | memset( unsigned_outbuffer, 0, BUFSIZE); | 264 | memset( unsigned_outbuffer, 0, BUFSIZE); |
258 | 265 | ||
259 | for(;;) { | 266 | for(;;) { |
260 | if ( stopped) { | 267 | if ( stopped) { |
261 | odebug << "quickRec:: stopped" << oendl; | 268 | odebug << "quickRec:: stopped" << oendl; |
262 | break; // stop if playing was set to false | 269 | break; // stop if playing was set to false |
263 | } | 270 | } |
264 | 271 | ||
265 | number = ::read( soundDevice->sd /*filePara.sd*/ , unsigned_inbuffer, BUFSIZE); | 272 | number = ::read( soundDevice->sd /*filePara.sd*/ , unsigned_inbuffer, BUFSIZE); |
266 | bytesWritten = ::write( filePara.fd , unsigned_inbuffer, number); | 273 | bytesWritten = ::write( filePara.fd , unsigned_inbuffer, number); |
267 | waveform->newSamples( (const short *) unsigned_inbuffer, number ); | 274 | waveform->newSamples( (const short *) unsigned_inbuffer, number ); |
268 | 275 | ||
269 | if(bytesWritten < 0) { | 276 | if(bytesWritten < 0) { |
270 | stopped = true; | 277 | stopped = true; |
271 | QMessageBox::message("Note","<p>There was a problem writing to the file</p>"); | 278 | QMessageBox::message("Note","<p>There was a problem writing to the file</p>"); |
272 | perror("File writing error "); | 279 | perror("File writing error "); |
273 | return; | 280 | return; |
274 | } | 281 | } |
275 | 282 | ||
276 | total += bytesWritten; | 283 | total += bytesWritten; |
277 | filePara.numberSamples = total; | 284 | filePara.numberSamples = total; |
278 | // printf("%d, bytes %d,total %d \r",number, bytesWritten , total); | 285 | // printf("%d, bytes %d,total %d \r",number, bytesWritten , total); |
279 | // fflush(stdout); | 286 | // fflush(stdout); |
280 | if( filePara.SecondsToRecord !=0) | 287 | if( filePara.SecondsToRecord !=0) |
281 | timeSlider->setValue( total); | 288 | timeSlider->setValue( total); |
282 | 289 | ||
283 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate; | 290 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate; |
284 | 291 | ||
285 | qApp->processEvents(); | 292 | qApp->processEvents(); |
286 | if( total >= filePara.samplesToRecord) { | 293 | if( total >= filePara.samplesToRecord) { |
287 | stopped = true; | 294 | stopped = true; |
288 | break; | 295 | break; |
289 | } | 296 | } |
290 | } //end main loop | 297 | } //end main loop |
291 | } | 298 | } |
292 | } /// END quickRec() | 299 | } /// END quickRec() |
293 | 300 | ||
294 | 301 | ||
295 | #ifdef THREADED | 302 | #ifdef THREADED |
296 | void playIt() | 303 | void playIt() |
297 | #else | 304 | #else |
298 | void QtRec::playIt() | 305 | void QtRec::playIt() |
299 | #endif | 306 | #endif |
300 | { | 307 | { |
301 | int bytesWritten = 0; | 308 | int bytesWritten = 0; |
302 | int number = 0; | 309 | int number = 0; |
303 | int total = 0; // Total number of bytes read in so far. | 310 | int total = 0; // Total number of bytes read in so far. |
304 | if( filePara.resolution == 16 ) { //AFMT_S16_LE) { | 311 | if( filePara.resolution == 16 ) { //AFMT_S16_LE) { |
305 | if( filePara.format == WAVE_FORMAT_DVI_ADPCM) { | 312 | if( filePara.format == WAVE_FORMAT_DVI_ADPCM) { |
306 | char abuf[ BUFSIZE / 2 ]; | 313 | char abuf[ BUFSIZE / 2 ]; |
307 | short sbuf[ BUFSIZE ]; | 314 | short sbuf[ BUFSIZE ]; |
308 | short sbuf2[ BUFSIZE * 2 ]; | 315 | short sbuf2[ BUFSIZE * 2 ]; |
309 | memset( abuf, 0, BUFSIZE / 2); | 316 | memset( abuf, 0, BUFSIZE / 2); |
310 | memset( sbuf, 0, BUFSIZE); | 317 | memset( sbuf, 0, BUFSIZE); |
311 | memset( sbuf2, 0, BUFSIZE * 2); | 318 | memset( sbuf2, 0, BUFSIZE * 2); |
312 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> | 319 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_DVI_ADPCM >>>>>>>>>>>>>>>>>>>>>> |
313 | for(;;) { // play loop | 320 | for(;;) { // play loop |
314 | if ( stopped) { | 321 | if ( stopped) { |
315 | break; | 322 | break; |
316 | return; | 323 | return; |
317 | }// stop if playing was set to false | 324 | }// stop if playing was set to false |
318 | 325 | ||
319 | number = ::read( filePara.fd, abuf, BUFSIZE / 2); | 326 | number = ::read( filePara.fd, abuf, BUFSIZE / 2); |
320 | adpcm_decoder( abuf, sbuf, number * 2, &decoder_state); | 327 | adpcm_decoder( abuf, sbuf, number * 2, &decoder_state); |
321 | 328 | ||
322 | // for (int i=0;i< number * 2; 2 * i++) { //2*i is left channel | 329 | // for (int i=0;i< number * 2; 2 * i++) { //2*i is left channel |
323 | // sbuf2[i+1]=sbuf2[i]=sbuf[i]; | 330 | // sbuf2[i+1]=sbuf2[i]=sbuf[i]; |
324 | // } | 331 | // } |
325 | bytesWritten = write ( filePara.sd, sbuf, number * 4); | 332 | bytesWritten = write ( filePara.sd, sbuf, number * 4); |
326 | waveform->newSamples( (const short *)sbuf, number *4); | 333 | waveform->newSamples( (const short *)sbuf, number *4); |
327 | // if(filePara.channels==1) | 334 | // if(filePara.channels==1) |
328 | // total += bytesWritten/2; //mono | 335 | // total += bytesWritten/2; //mono |
329 | // else | 336 | // else |
330 | total += bytesWritten; | 337 | total += bytesWritten; |
331 | filePara.numberSamples = total/4; | 338 | filePara.numberSamples = total/4; |
332 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / 2; | 339 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / 2; |
333 | 340 | ||
334 | timeSlider->setValue( total/4); | 341 | timeSlider->setValue( total/4); |
335 | // timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); | 342 | // timeString.sprintf("%.2f", filePara.numberOfRecordedSeconds); |
336 | // if(filePara.numberOfRecordedSeconds>1) | 343 | // if(filePara.numberOfRecordedSeconds>1) |
337 | // timeLabel->setText( timeString+ tr(" seconds")); | 344 | // timeLabel->setText( timeString+ tr(" seconds")); |
338 | // printf("playing number %d, bytes %d, total %d\n",number, bytesWritten, total/4); | 345 | // printf("playing number %d, bytes %d, total %d\n",number, bytesWritten, total/4); |
339 | // fflush(stdout); | 346 | // fflush(stdout); |
340 | 347 | ||
341 | qApp->processEvents(); | 348 | qApp->processEvents(); |
342 | 349 | ||
343 | if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { | 350 | if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { |
344 | // if( total >= filePara.numberSamples ){//|| secCount > filePara.numberOfRecordedSeconds ) { | 351 | // if( total >= filePara.numberSamples ){//|| secCount > filePara.numberOfRecordedSeconds ) { |
345 | stopped = true; | 352 | stopped = true; |
346 | break; | 353 | break; |
347 | } | 354 | } |
348 | } | 355 | } |
349 | } else { | 356 | } else { |
350 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> | 357 | // <<<<<<<<<<<<<<<<<<<<<<<<<<< WAVE_FORMAT_PCM >>>>>>>>>>>>>>>>>>>>>> |
351 | short inbuffer[ BUFSIZE ], outbuffer[ BUFSIZE ]; | 358 | short inbuffer[ BUFSIZE ], outbuffer[ BUFSIZE ]; |
352 | memset( inbuffer, 0, BUFSIZE); | 359 | memset( inbuffer, 0, BUFSIZE); |
353 | memset( outbuffer, 0, BUFSIZE); | 360 | memset( outbuffer, 0, BUFSIZE); |
354 | 361 | ||
355 | for(;;) { // play loop | 362 | for(;;) { // play loop |
356 | if ( stopped) { | 363 | if ( stopped) { |
357 | break; | 364 | break; |
358 | return; | 365 | return; |
359 | } | 366 | } |
360 | // stop if playing was set to false | 367 | // stop if playing was set to false |
361 | number = ::read( filePara.fd, inbuffer, BUFSIZE); | 368 | number = ::read( filePara.fd, inbuffer, BUFSIZE); |
362 | // for (int i=0;i< number * 2; 2 * i++) { //2*i is left channel | 369 | // for (int i=0;i< number * 2; 2 * i++) { //2*i is left channel |
363 | // // for (int i=0;i< number ; i++) { //2*i is left channel | 370 | // // for (int i=0;i< number ; i++) { //2*i is left channel |
364 | // outbuffer[i+1]= outbuffer[i]=inbuffer[i]; | 371 | // outbuffer[i+1]= outbuffer[i]=inbuffer[i]; |
365 | // } | 372 | // } |
366 | bytesWritten = ::write( filePara.sd, inbuffer, number); | 373 | bytesWritten = ::write( filePara.sd, inbuffer, number); |
367 | waveform->newSamples( inbuffer, number); | 374 | waveform->newSamples( inbuffer, number); |
368 | //-------------->>>> out to device | 375 | //-------------->>>> out to device |
369 | // total+=bytesWritten; | 376 | // total+=bytesWritten; |
370 | // if(filePara.channels==1) | 377 | // if(filePara.channels==1) |
371 | // total += bytesWritten/2; //mono | 378 | // total += bytesWritten/2; //mono |
372 | // else | 379 | // else |
373 | total += bytesWritten; | 380 | total += bytesWritten; |
374 | timeSlider->setValue( total); | 381 | timeSlider->setValue( total); |
375 | 382 | ||
376 | filePara.numberSamples = total; | 383 | filePara.numberSamples = total; |
377 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / (float)2; | 384 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate / (float)2; |
378 | 385 | ||
379 | // timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); | 386 | // timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); |
380 | // timeLabel->setText( timeString + tr(" seconds")); | 387 | // timeLabel->setText( timeString + tr(" seconds")); |
381 | 388 | ||
382 | qApp->processEvents(); | 389 | qApp->processEvents(); |
383 | 390 | ||
384 | if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { | 391 | if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { |
385 | owarn << "Jane! Stop this crazy thing!" << oendl; | 392 | owarn << "Jane! Stop this crazy thing!" << oendl; |
386 | stopped = true; | 393 | stopped = true; |
387 | // playing = false; | 394 | // playing = false; |
388 | break; | 395 | break; |
389 | } | 396 | } |
390 | } | 397 | } |
391 | // printf("\nplaying number %d, bytes %d, total %d\r",number, bytesWritten, total); | 398 | // printf("\nplaying number %d, bytes %d, total %d\r",number, bytesWritten, total); |
392 | // fflush(stdout); | 399 | // fflush(stdout); |
393 | } //end loop | 400 | } //end loop |
394 | } else { | 401 | } else { |
395 | /////////////////////////////// format = AFMT_U8; | 402 | /////////////////////////////// format = AFMT_U8; |
396 | unsigned char unsigned_inbuffer[ BUFSIZE ]; //, unsigned_outbuffer[BUFSIZE]; | 403 | unsigned char unsigned_inbuffer[ BUFSIZE ]; //, unsigned_outbuffer[BUFSIZE]; |
397 | memset( unsigned_inbuffer, 0, BUFSIZE); | 404 | memset( unsigned_inbuffer, 0, BUFSIZE); |
398 | for(;;) { | 405 | for(;;) { |
399 | // main loop | 406 | // main loop |
400 | if (stopped) { | 407 | if (stopped) { |
401 | break; // stop if playing was set to false | 408 | break; // stop if playing was set to false |
402 | return; | 409 | return; |
403 | } | 410 | } |
404 | number = ::read( filePara.fd, unsigned_inbuffer, BUFSIZE); | 411 | number = ::read( filePara.fd, unsigned_inbuffer, BUFSIZE); |
405 | //data = (val >> 8) ^ 0x80; | 412 | //data = (val >> 8) ^ 0x80; |
406 | // unsigned_outbuffer = (unsigned_inbuffer >> 8) ^ 0x80; | 413 | // unsigned_outbuffer = (unsigned_inbuffer >> 8) ^ 0x80; |
407 | bytesWritten = write ( filePara.sd, unsigned_inbuffer, number); | 414 | bytesWritten = write ( filePara.sd, unsigned_inbuffer, number); |
408 | waveform->newSamples( (const short *)unsigned_inbuffer, bytesWritten ); | 415 | waveform->newSamples( (const short *)unsigned_inbuffer, bytesWritten ); |
409 | total += bytesWritten; | 416 | total += bytesWritten; |
410 | 417 | ||
411 | timeSlider->setValue( total); | 418 | timeSlider->setValue( total); |
412 | filePara.numberSamples = total; | 419 | filePara.numberSamples = total; |
413 | 420 | ||
414 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate; | 421 | filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate; |
415 | // timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); | 422 | // timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); |
416 | // timeLabel->setText( timeString + tr(" seconds")); | 423 | // timeLabel->setText( timeString + tr(" seconds")); |
417 | qApp->processEvents(); | 424 | qApp->processEvents(); |
418 | 425 | ||
419 | if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { | 426 | if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { |
420 | // if( total >= filePara.numberSamples ) { | 427 | // if( total >= filePara.numberSamples ) { |
421 | stopped = true; | 428 | stopped = true; |
422 | break; | 429 | break; |
423 | } | 430 | } |
424 | // printf("Writing number %d, bytes %d, total %d, numberSamples %d\r",number, bytesWritten , total, filePara.numberSamples); | 431 | // printf("Writing number %d, bytes %d, total %d, numberSamples %d\r",number, bytesWritten , total, filePara.numberSamples); |
425 | // fflush(stdout); | 432 | // fflush(stdout); |
426 | } | 433 | } |
427 | } | 434 | } |
428 | } | 435 | } |
429 | 436 | ||
430 | 437 | ||
431 | QtRec::QtRec( QWidget* parent, const char* name, WFlags fl ) | 438 | QtRec::QtRec( QWidget* parent, const char* name, WFlags fl ) |
432 | : QWidget( parent, name, fl ) | 439 | : QWidget( parent, name, fl ) |
433 | { | 440 | { |
434 | if ( !name ) | 441 | if ( !name ) |
435 | setName( "OpieRec" ); | 442 | setName( "OpieRec" ); |
436 | init(); | 443 | init(); |
437 | initConfig(); | 444 | initConfig(); |
438 | initConnections(); | 445 | initConnections(); |
439 | renameBox = 0; | 446 | renameBox = 0; |
440 | 447 | ||
441 | // open sound device to get volumes | 448 | // open sound device to get volumes |
442 | Config hwcfg("OpieRec"); | 449 | Config hwcfg("OpieRec"); |
443 | hwcfg.setGroup("Hardware"); | 450 | hwcfg.setGroup("Hardware"); |
444 | 451 | ||
445 | 452 | ||
446 | soundDevice = new Device( this, | 453 | soundDevice = new Device( this, |
447 | hwcfg.readEntry( "Audio",DSPSTROUT), | 454 | hwcfg.readEntry( "Audio",DSPSTROUT), |
448 | hwcfg.readEntry( "Mixer",DSPSTRMIXEROUT), false); | 455 | hwcfg.readEntry( "Mixer",DSPSTRMIXEROUT), false); |
449 | // soundDevice = new Device( this, hwcfg.readEntry( "Audio","hw:0"), hwcfg.readEntry( "Mixer","hw:0"), false); | 456 | // soundDevice = new Device( this, hwcfg.readEntry( "Audio","hw:0"), hwcfg.readEntry( "Mixer","hw:0"), false); |
450 | 457 | ||
451 | // soundDevice->setDeviceFormat(AFMT_S16_LE); | 458 | // soundDevice->setDeviceFormat(AFMT_S16_LE); |
452 | // soundDevice->setDeviceChannels(1); | 459 | // soundDevice->setDeviceChannels(1); |
453 | // soundDevice->setDeviceRate( 22050); | 460 | // soundDevice->setDeviceRate( 22050); |
454 | 461 | ||
455 | getInVol(); | 462 | getInVol(); |
456 | getOutVol(); | 463 | getOutVol(); |
457 | 464 | ||
458 | soundDevice->closeDevice( true); | 465 | soundDevice->closeDevice( true); |
459 | soundDevice->sd = -1; | 466 | soundDevice->sd = -1; |
460 | soundDevice = 0; | 467 | soundDevice = 0; |
461 | wavFile = 0; | 468 | wavFile = 0; |
462 | 469 | ||
463 | // if( soundDevice) delete soundDevice; | 470 | // if( soundDevice) delete soundDevice; |
464 | 471 | ||
465 | initIconView(); | 472 | initIconView(); |
466 | 473 | ||
467 | if( autoMute) | 474 | if( autoMute) |
468 | doMute( true); | 475 | doMute( true); |
469 | ListView1->setFocus(); | 476 | ListView1->setFocus(); |
470 | playing = false; | 477 | playing = false; |
471 | } | 478 | } |
472 | 479 | ||
473 | QtRec::~QtRec() { | 480 | QtRec::~QtRec() { |
474 | // if( soundDevice) delete soundDevice; | 481 | // if( soundDevice) delete soundDevice; |
475 | 482 | ||
476 | } | 483 | } |
477 | 484 | ||
478 | void QtRec::cleanUp() { | 485 | void QtRec::cleanUp() { |
479 | 486 | ||
480 | if( !stopped) { | 487 | if( !stopped) { |
481 | stopped = true; | 488 | stopped = true; |
482 | endRecording(); | 489 | endRecording(); |
483 | } | 490 | } |
484 | 491 | ||
485 | ListView1->clear(); | 492 | ListView1->clear(); |
486 | 493 | ||
487 | if( autoMute) | 494 | if( autoMute) |
488 | doMute(false); | 495 | doMute(false); |
489 | 496 | ||
490 | // if( wavFile) delete wavFile; | 497 | // if( wavFile) delete wavFile; |
491 | // if(soundDevice) delete soundDevice; | 498 | // if(soundDevice) delete soundDevice; |
492 | } | 499 | } |
493 | 500 | ||
494 | void QtRec::init() { | 501 | void QtRec::init() { |
495 | 502 | ||
496 | needsStereoOut = false; | 503 | needsStereoOut = false; |
497 | QPixmap image3( ( const char** ) image3_data ); | 504 | QPixmap image3( ( const char** ) image3_data ); |
498 | QPixmap image4( ( const char** ) image4_data ); | 505 | QPixmap image4( ( const char** ) image4_data ); |
499 | QPixmap image6( ( const char** ) image6_data ); | 506 | QPixmap image6( ( const char** ) image6_data ); |
500 | 507 | ||
501 | stopped = true; | 508 | stopped = true; |
502 | setCaption( tr( "OpieRecord " ) + QString::number(VERSION) ); | 509 | setCaption( tr( "OpieRecord " ) + QString::number(VERSION) ); |
503 | QGridLayout *layout = new QGridLayout( this ); | 510 | QGridLayout *layout = new QGridLayout( this ); |
504 | layout->setSpacing( 2); | 511 | layout->setSpacing( 2); |
505 | layout->setMargin( 2); | 512 | layout->setMargin( 2); |
506 | 513 | ||
507 | TabWidget = new QTabWidget( this, "TabWidget" ); | 514 | TabWidget = new QTabWidget( this, "TabWidget" ); |
508 | layout->addMultiCellWidget(TabWidget, 0, 7, 0, 8); | 515 | layout->addMultiCellWidget(TabWidget, 0, 7, 0, 8); |
509 | // TabWidget->setTabShape(QTabWidget::Triangular); | 516 | // TabWidget->setTabShape(QTabWidget::Triangular); |
510 | 517 | ||
511 | ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** | 518 | ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** |
512 | tab = new QWidget( TabWidget, "tab" ); | 519 | tab = new QWidget( TabWidget, "tab" ); |
513 | 520 | ||
514 | QGridLayout *layout1 = new QGridLayout( tab); | 521 | QGridLayout *layout1 = new QGridLayout( tab); |
515 | layout1->setSpacing( 2); | 522 | layout1->setSpacing( 2); |
516 | layout1->setMargin( 2); | 523 | layout1->setMargin( 2); |
517 | 524 | ||
518 | timeSlider = new QSlider( 0,100,10,0, QSlider::Horizontal, tab, (const char *) "timeSlider" ); | 525 | timeSlider = new QSlider( 0,100,10,0, QSlider::Horizontal, tab, (const char *) "timeSlider" ); |
519 | layout1->addMultiCellWidget( timeSlider, 1, 1, 0, 3); | 526 | layout1->addMultiCellWidget( timeSlider, 1, 1, 0, 3); |
520 | 527 | ||
521 | // timeLabel = new QLabel( tab, "TimeLabel" ); | 528 | // timeLabel = new QLabel( tab, "TimeLabel" ); |
522 | // layout1->addMultiCellWidget( timeLabel, 0, 0, 0, 3); | 529 | // layout1->addMultiCellWidget( timeLabel, 0, 0, 0, 3); |
523 | 530 | ||
524 | // playLabel2 = new QLabel(tab, "PlayLabel2" ); | 531 | // playLabel2 = new QLabel(tab, "PlayLabel2" ); |
525 | // playLabel2->setText(tr("Play") ); | 532 | // playLabel2->setText(tr("Play") ); |
526 | // playLabel2->setFixedHeight( 18); | 533 | // playLabel2->setFixedHeight( 18); |
527 | // layout1->addMultiCellWidget( playLabel2, 0, 0, 4, 4); | 534 | // layout1->addMultiCellWidget( playLabel2, 0, 0, 4, 4); |
528 | 535 | ||
529 | Stop_PushButton = new QPushButton( tab, "Stop_PushButton" ); | 536 | Stop_PushButton = new QPushButton( tab, "Stop_PushButton" ); |
530 | layout1->addMultiCellWidget( Stop_PushButton, 1, 1, 4, 4); | 537 | layout1->addMultiCellWidget( Stop_PushButton, 1, 1, 4, 4); |
531 | Stop_PushButton->setFixedSize( 22, 22); | 538 | Stop_PushButton->setFixedSize( 22, 22); |
532 | Stop_PushButton->setPixmap( image4 ); | 539 | Stop_PushButton->setPixmap( image4 ); |
533 | 540 | ||
534 | toBeginningButton = new QPushButton( tab, "Beginning_PushButton" ); | 541 | toBeginningButton = new QPushButton( tab, "Beginning_PushButton" ); |
535 | layout1->addMultiCellWidget(toBeginningButton, 1, 1, 5, 5); | 542 | layout1->addMultiCellWidget(toBeginningButton, 1, 1, 5, 5); |
536 | toBeginningButton->setFixedSize( 22, 22); | 543 | toBeginningButton->setFixedSize( 22, 22); |
537 | toBeginningButton->setPixmap( Resource::loadPixmap("fastback") ); | 544 | toBeginningButton->setPixmap( Resource::loadPixmap("fastback") ); |
538 | 545 | ||
539 | toEndButton = new QPushButton( tab, "End_PushButton" ); | 546 | toEndButton = new QPushButton( tab, "End_PushButton" ); |
540 | layout1->addMultiCellWidget( toEndButton, 1, 1, 6, 6); | 547 | layout1->addMultiCellWidget( toEndButton, 1, 1, 6, 6); |
541 | toEndButton->setFixedSize( 22, 22); | 548 | toEndButton->setFixedSize( 22, 22); |
542 | toEndButton->setPixmap( Resource::loadPixmap( "fastforward" ) ); | 549 | toEndButton->setPixmap( Resource::loadPixmap( "fastforward" ) ); |
543 | 550 | ||
544 | // QLabel *recLabel2; | 551 | // QLabel *recLabel2; |
545 | // recLabel2 = new QLabel( tab, "recLabel2" ); | 552 | // recLabel2 = new QLabel( tab, "recLabel2" ); |
546 | // recLabel2->setText(tr("Rec")); | 553 | // recLabel2->setText(tr("Rec")); |
547 | // recLabel2->setFixedHeight( 18); | 554 | // recLabel2->setFixedHeight( 18); |
548 | // layout1->addMultiCellWidget( recLabel2, 0, 0, 7, 7); | 555 | // layout1->addMultiCellWidget( recLabel2, 0, 0, 7, 7); |
549 | 556 | ||
550 | Rec_PushButton = new QPushButton( tab, "Rec_PushButton" ); | 557 | Rec_PushButton = new QPushButton( tab, "Rec_PushButton" ); |
551 | layout1->addMultiCellWidget( Rec_PushButton, 1, 1, 7, 7); | 558 | layout1->addMultiCellWidget( Rec_PushButton, 1, 1, 7, 7); |
552 | Rec_PushButton->setFixedSize( 22, 22); | 559 | Rec_PushButton->setFixedSize( 22, 22); |
553 | Rec_PushButton->setPixmap( image6 ); | 560 | Rec_PushButton->setPixmap( image6 ); |
554 | 561 | ||
555 | t = new QTimer( this ); | 562 | t = new QTimer( this ); |
556 | connect( t, SIGNAL( timeout() ), SLOT( timerBreak() ) ); | 563 | connect( t, SIGNAL( timeout() ), SLOT( timerBreak() ) ); |
557 | 564 | ||
558 | rewindTimer = new QTimer( this ); | 565 | rewindTimer = new QTimer( this ); |
559 | connect( rewindTimer, SIGNAL( timeout() ), | 566 | connect( rewindTimer, SIGNAL( timeout() ), |
560 | this, SLOT( rewindTimerTimeout() ) ); | 567 | this, SLOT( rewindTimerTimeout() ) ); |
561 | 568 | ||
562 | forwardTimer = new QTimer( this ); | 569 | forwardTimer = new QTimer( this ); |
563 | connect( forwardTimer, SIGNAL( timeout() ), | 570 | connect( forwardTimer, SIGNAL( timeout() ), |
564 | this, SLOT( forwardTimerTimeout() ) ); | 571 | this, SLOT( forwardTimerTimeout() ) ); |
565 | 572 | ||
566 | deleteSoundButton = new QPushButton( tab, "deleteSoundButton" ); | 573 | deleteSoundButton = new QPushButton( tab, "deleteSoundButton" ); |
567 | layout1->addMultiCellWidget( deleteSoundButton, 1, 1, 8, 8); | 574 | layout1->addMultiCellWidget( deleteSoundButton, 1, 1, 8, 8); |
568 | deleteSoundButton->setText( tr( "Del" ) ); | 575 | deleteSoundButton->setText( tr( "Del" ) ); |
569 | 576 | ||
570 | ListView1 = new QListView( tab, "IconView1" ); | 577 | ListView1 = new QListView( tab, "IconView1" ); |
571 | layout1->addMultiCellWidget( ListView1, 2, 2, 0, 8); | 578 | layout1->addMultiCellWidget( ListView1, 2, 2, 0, 8); |
572 | 579 | ||
573 | ListView1->addColumn( tr( "Name" ) ); | 580 | ListView1->addColumn( tr( "Name" ) ); |
574 | // ListView1->setColumnWidth( 0, 140); | 581 | // ListView1->setColumnWidth( 0, 140); |
575 | ListView1->setSorting( 1, false); | 582 | ListView1->setSorting( 1, false); |
576 | ListView1->addColumn( tr( "Time" ) ); //in seconds | 583 | ListView1->addColumn( tr( "Time" ) ); //in seconds |
577 | // ListView1->setColumnWidth( 1, -1); | 584 | // ListView1->setColumnWidth( 1, -1); |
578 | // ListView1->addColumn( tr("Location") ); | 585 | // ListView1->addColumn( tr("Location") ); |
579 | // ListView1->setColumnWidth( 2, -1); | 586 | // ListView1->setColumnWidth( 2, -1); |
580 | // ListView1->addColumn( tr("Date") ); | 587 | // ListView1->addColumn( tr("Date") ); |
581 | // ListView1->setColumnWidth( 3, -1); | 588 | // ListView1->setColumnWidth( 3, -1); |
582 | ListView1->setColumnWidthMode(0, QListView::Maximum); | 589 | ListView1->setColumnWidthMode(0, QListView::Maximum); |
583 | // ListView1->setColumnWidthMode(1, QListView::Maximum); | 590 | // ListView1->setColumnWidthMode(1, QListView::Maximum); |
584 | 591 | ||
585 | // ListView1->setColumnWidthMode( 0, QListView::Manual); | 592 | // ListView1->setColumnWidthMode( 0, QListView::Manual); |
586 | ListView1->setColumnAlignment( 1, QListView::AlignCenter); | 593 | ListView1->setColumnAlignment( 1, QListView::AlignCenter); |
587 | // ListView1->setColumnAlignment( 2, QListView::AlignRight); | 594 | // ListView1->setColumnAlignment( 2, QListView::AlignRight); |
588 | // ListView1->setColumnAlignment( 3, QListView::AlignLeft); | 595 | // ListView1->setColumnAlignment( 3, QListView::AlignLeft); |
589 | ListView1->setAllColumnsShowFocus( true ); | 596 | ListView1->setAllColumnsShowFocus( true ); |
590 | QPEApplication::setStylusOperation( ListView1->viewport(), QPEApplication::RightOnHold); | 597 | QPEApplication::setStylusOperation( ListView1->viewport(), QPEApplication::RightOnHold); |
591 | 598 | ||
592 | TabWidget->insertTab( tab, tr( "Files" ) ); | 599 | TabWidget->insertTab( tab, tr( "Files" ) ); |
593 | 600 | ||
594 | ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** | 601 | ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** |
595 | tab_3 = new QWidget( TabWidget, "tab_3" ); | 602 | tab_3 = new QWidget( TabWidget, "tab_3" ); |
596 | QGridLayout *glayout3 = new QGridLayout( tab_3 ); | 603 | QGridLayout *glayout3 = new QGridLayout( tab_3 ); |
597 | glayout3->setSpacing( 2); | 604 | glayout3->setSpacing( 2); |
598 | glayout3->setMargin( 2); | 605 | glayout3->setMargin( 2); |
599 | //////////////////////////////////// | 606 | //////////////////////////////////// |
600 | sampleGroup = new QGroupBox( tab_3, "samplegroup" ); | 607 | sampleGroup = new QGroupBox( tab_3, "samplegroup" ); |
601 | sampleGroup->setTitle( tr( "Sample Rate" ) ); | 608 | sampleGroup->setTitle( tr( "Sample Rate" ) ); |
602 | sampleGroup->setFixedSize( 95,50); | 609 | sampleGroup->setFixedSize( 95,50); |
603 | 610 | ||
604 | sampleRateComboBox = new QComboBox( false, sampleGroup, "SampleRateComboBox" ); | 611 | sampleRateComboBox = new QComboBox( false, sampleGroup, "SampleRateComboBox" ); |
605 | sampleRateComboBox->setGeometry( QRect( 10, 20, 80, 25 ) ); | 612 | sampleRateComboBox->setGeometry( QRect( 10, 20, 80, 25 ) ); |
606 | //#ifndef QT_QWS_EBX | 613 | //#ifndef QT_QWS_EBX |
607 | QString s; | 614 | QString s; |
608 | int z = 0; | 615 | int z = 0; |
609 | while( deviceSampleRates[z] != -1) { | 616 | while( deviceSampleRates[z] != -1) { |
610 | sampleRateComboBox->insertItem( s.setNum( deviceSampleRates[z], 10)); | 617 | sampleRateComboBox->insertItem( s.setNum( deviceSampleRates[z], 10)); |
611 | z++; | 618 | z++; |
612 | } | 619 | } |
613 | 620 | ||
614 | 621 | ||
615 | glayout3->addMultiCellWidget( sampleGroup, 0, 0, 0, 0); | 622 | glayout3->addMultiCellWidget( sampleGroup, 0, 0, 0, 0); |
616 | 623 | ||
617 | sizeGroup= new QGroupBox( tab_3, "sizeGroup" ); | 624 | sizeGroup= new QGroupBox( tab_3, "sizeGroup" ); |
618 | sizeGroup->setTitle( tr( "Limit Size" ) ); | 625 | sizeGroup->setTitle( tr( "Limit Size" ) ); |
619 | sizeGroup->setFixedSize( 80, 50); | 626 | sizeGroup->setFixedSize( 80, 50); |
620 | 627 | ||
621 | sizeLimitCombo = new QComboBox( false, sizeGroup, "sizeLimitCombo" ); | 628 | sizeLimitCombo = new QComboBox( false, sizeGroup, "sizeLimitCombo" ); |
622 | sizeLimitCombo ->setGeometry( QRect( 5, 20, 70, 25 ) ); | 629 | sizeLimitCombo ->setGeometry( QRect( 5, 20, 70, 25 ) ); |
623 | sizeLimitCombo->insertItem(tr("Unlimited")); | 630 | sizeLimitCombo->insertItem(tr("Unlimited")); |
624 | 631 | ||
625 | for(int i=1;i<13; i++) { | 632 | for(int i=1;i<13; i++) { |
626 | sizeLimitCombo->insertItem( QString::number( i * 5)); | 633 | sizeLimitCombo->insertItem( QString::number( i * 5)); |
627 | } | 634 | } |
628 | 635 | ||
629 | 636 | ||
630 | glayout3->addMultiCellWidget( sizeGroup, 0, 0, 1, 1); | 637 | glayout3->addMultiCellWidget( sizeGroup, 0, 0, 1, 1); |
631 | dirGroup = new QGroupBox( tab_3, "dirGroup" ); | 638 | dirGroup = new QGroupBox( tab_3, "dirGroup" ); |
632 | dirGroup->setTitle( tr( "File Directory" ) ); | 639 | dirGroup->setTitle( tr( "File Directory" ) ); |
633 | dirGroup->setFixedSize( 130, 50); | 640 | dirGroup->setFixedSize( 130, 50); |
634 | 641 | ||
635 | directoryComboBox = new QComboBox( false, dirGroup, "dirGroup" ); | 642 | directoryComboBox = new QComboBox( false, dirGroup, "dirGroup" ); |
636 | directoryComboBox->setGeometry( QRect( 10, 15, 115, 25 ) ); | 643 | directoryComboBox->setGeometry( QRect( 10, 15, 115, 25 ) ); |
637 | 644 | ||
638 | glayout3->addMultiCellWidget( dirGroup, 1, 1, 0, 0); | 645 | glayout3->addMultiCellWidget( dirGroup, 1, 1, 0, 0); |
639 | 646 | ||
640 | bitGroup = new QGroupBox( tab_3, "bitGroup" ); | 647 | bitGroup = new QGroupBox( tab_3, "bitGroup" ); |
641 | bitGroup->setTitle( tr( "Bit Depth" ) ); | 648 | bitGroup->setTitle( tr( "Bit Depth" ) ); |
642 | bitGroup->setFixedSize( 65, 50); | 649 | bitGroup->setFixedSize( 65, 50); |
643 | 650 | ||
644 | bitRateComboBox = new QComboBox( false, bitGroup, "BitRateComboBox" ); | 651 | bitRateComboBox = new QComboBox( false, bitGroup, "BitRateComboBox" ); |
645 | 652 | ||
646 | z = 0; | 653 | z = 0; |
647 | while( deviceBitRates[z] != -1) { | 654 | while( deviceBitRates[z] != -1) { |
648 | bitRateComboBox->insertItem( s.setNum( deviceBitRates[z], 10) ); | 655 | bitRateComboBox->insertItem( s.setNum( deviceBitRates[z], 10) ); |
649 | z++; | 656 | z++; |
650 | } | 657 | } |
651 | 658 | ||
652 | bitRateComboBox->setGeometry( QRect( 5, 20, 50, 25 ) ); | 659 | bitRateComboBox->setGeometry( QRect( 5, 20, 50, 25 ) ); |
653 | 660 | ||
654 | glayout3->addMultiCellWidget( bitGroup, 1, 1, 1, 1); | 661 | glayout3->addMultiCellWidget( bitGroup, 1, 1, 1, 1); |
655 | 662 | ||
656 | compressionCheckBox = new QCheckBox ( tr("Wave Compression (smaller files)"), tab_3 ); | 663 | compressionCheckBox = new QCheckBox ( tr("Wave Compression (smaller files)"), tab_3 ); |
657 | 664 | ||
658 | autoMuteCheckBox = new QCheckBox ( tr("Auto Mute"), tab_3 ); | 665 | autoMuteCheckBox = new QCheckBox ( tr("Auto Mute"), tab_3 ); |
659 | stereoCheckBox = new QCheckBox ( tr("Stereo"), tab_3 ); | 666 | stereoCheckBox = new QCheckBox ( tr("Stereo"), tab_3 ); |
660 | 667 | ||
661 | glayout3->addMultiCellWidget( compressionCheckBox, 2, 2, 0, 3); | 668 | glayout3->addMultiCellWidget( compressionCheckBox, 2, 2, 0, 3); |
662 | glayout3->addMultiCellWidget( autoMuteCheckBox, 3, 3, 0, 0); | 669 | glayout3->addMultiCellWidget( autoMuteCheckBox, 3, 3, 0, 0); |
663 | glayout3->addMultiCellWidget( stereoCheckBox, 3, 3, 1, 1); | 670 | glayout3->addMultiCellWidget( stereoCheckBox, 3, 3, 1, 1); |
664 | 671 | ||
665 | tab_5 = new QWidget( TabWidget, "tab_5" ); | 672 | tab_5 = new QWidget( TabWidget, "tab_5" ); |
666 | 673 | ||
667 | QHBoxLayout *Layout19a; | 674 | QHBoxLayout *Layout19a; |
668 | Layout19a = new QHBoxLayout( tab_5); | 675 | Layout19a = new QHBoxLayout( tab_5); |
669 | Layout19a->setSpacing( 2 ); | 676 | Layout19a->setSpacing( 2 ); |
670 | Layout19a->setMargin( 0 ); | 677 | Layout19a->setMargin( 0 ); |
671 | 678 | ||
672 | Layout15 = new QVBoxLayout( this); | 679 | Layout15 = new QVBoxLayout( this); |
673 | Layout15->setSpacing( 2 ); | 680 | Layout15->setSpacing( 2 ); |
674 | Layout15->setMargin( 0 ); | 681 | Layout15->setMargin( 0 ); |
675 | 682 | ||
676 | Layout15b = new QVBoxLayout( this); | 683 | Layout15b = new QVBoxLayout( this); |
677 | Layout15b->setSpacing( 2 ); | 684 | Layout15b->setSpacing( 2 ); |
678 | Layout15b->setMargin( 0 ); | 685 | Layout15b->setMargin( 0 ); |
679 | 686 | ||
680 | TextLabel2 = new QLabel( tab_5, "InputLabel" ); | 687 | TextLabel2 = new QLabel( tab_5, "InputLabel" ); |
681 | TextLabel2->setText( tr( "In")); | 688 | TextLabel2->setText( tr( "In")); |
682 | TextLabel2->setFixedWidth( 35); | 689 | TextLabel2->setFixedWidth( 35); |
683 | Layout15->addWidget( TextLabel2 ); | 690 | Layout15->addWidget( TextLabel2 ); |
684 | 691 | ||
685 | TextLabel3 = new QLabel( tab_5, "OutputLabel" ); | 692 | TextLabel3 = new QLabel( tab_5, "OutputLabel" ); |
686 | TextLabel3->setText( tr( "Out" ) ); | 693 | TextLabel3->setText( tr( "Out" ) ); |
687 | Layout15b->addWidget( TextLabel3 ); | 694 | Layout15b->addWidget( TextLabel3 ); |
688 | 695 | ||
689 | InputSlider = new QSlider( -100, 0, 10, 0, QSlider::Vertical, tab_5, (const char *) "InputSlider" ); | 696 | InputSlider = new QSlider( -100, 0, 10, 0, QSlider::Vertical, tab_5, (const char *) "InputSlider" ); |
690 | InputSlider->setTickmarks( QSlider::Both); | 697 | InputSlider->setTickmarks( QSlider::Both); |
691 | Layout15->addWidget( InputSlider); | 698 | Layout15->addWidget( InputSlider); |
692 | 699 | ||
693 | OutputSlider = new QSlider( -100,0,10,0, QSlider::Vertical,tab_5,(const char *) "OutputSlider" ); | 700 | OutputSlider = new QSlider( -100,0,10,0, QSlider::Vertical,tab_5,(const char *) "OutputSlider" ); |
694 | OutputSlider->setTickmarks( QSlider::Both); | 701 | OutputSlider->setTickmarks( QSlider::Both); |
695 | 702 | ||
696 | Layout15b->addWidget( OutputSlider ); | 703 | Layout15b->addWidget( OutputSlider ); |
697 | 704 | ||
698 | outMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 ); | 705 | outMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 ); |
699 | Layout15->addWidget( outMuteCheckBox ); | 706 | Layout15->addWidget( outMuteCheckBox ); |
700 | 707 | ||
701 | inMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 ); | 708 | inMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 ); |
702 | inMuteCheckBox-> setFocusPolicy ( QWidget::NoFocus ); | 709 | inMuteCheckBox-> setFocusPolicy ( QWidget::NoFocus ); |
703 | Layout15b->addWidget( inMuteCheckBox ); | 710 | Layout15b->addWidget( inMuteCheckBox ); |
704 | 711 | ||
705 | 712 | ||
706 | Layout19a->addLayout( Layout15 ); | 713 | Layout19a->addLayout( Layout15 ); |
707 | Layout19a->addLayout( Layout15b ); | 714 | Layout19a->addLayout( Layout15b ); |
708 | 715 | ||
709 | fillDirectoryCombo(); | 716 | fillDirectoryCombo(); |
710 | 717 | ||
711 | TabWidget->insertTab( tab_3, tr( "Options" ) ); | 718 | TabWidget->insertTab( tab_3, tr( "Options" ) ); |
712 | 719 | ||
713 | TabWidget->insertTab( tab_5, tr( "Volume" ) ); | 720 | TabWidget->insertTab( tab_5, tr( "Volume" ) ); |
714 | 721 | ||
715 | 722 | ||
716 | waveform = new Waveform( this, "waveform" ); | 723 | waveform = new Waveform( this, "waveform" ); |
717 | // waveform->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)3, waveform->sizePolicy().hasHeightForWidth() ) ); | 724 | // waveform->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)3, waveform->sizePolicy().hasHeightForWidth() ) ); |
718 | waveform->setMinimumSize( QSize( 0, 50 ) ); | 725 | waveform->setMinimumSize( QSize( 0, 50 ) ); |
719 | 726 | ||
720 | layout->addMultiCellWidget( waveform, 8, 8, 0, 8); | 727 | layout->addMultiCellWidget( waveform, 8, 8, 0, 8); |
721 | waveform->setBackgroundColor ( black ); | 728 | waveform->setBackgroundColor ( black ); |
722 | } | 729 | } |
723 | 730 | ||
724 | void QtRec::initIconView() { | 731 | void QtRec::initIconView() { |
725 | 732 | ||
726 | ListView1->clear(); | 733 | ListView1->clear(); |
727 | Config cfg("OpieRec"); | 734 | Config cfg("OpieRec"); |
728 | cfg.setGroup("Sounds"); | 735 | cfg.setGroup("Sounds"); |
729 | QString temp; | 736 | QString temp; |
730 | QPixmap image0( ( const char** ) image0_data ); | 737 | QPixmap image0( ( const char** ) image0_data ); |
731 | 738 | ||
732 | int nFiles = cfg.readNumEntry("NumberofFiles",0); | 739 | int nFiles = cfg.readNumEntry("NumberofFiles",0); |
733 | // odebug << "init number of files " << nFiles << "" << oendl; | 740 | // odebug << "init number of files " << nFiles << "" << oendl; |
734 | 741 | ||
735 | for(int i=1;i<= nFiles;i++) { | 742 | for(int i=1;i<= nFiles;i++) { |
736 | 743 | ||
737 | QListViewItem * item; | 744 | QListViewItem * item; |
738 | QString fileS, mediaLocation, fileDate, filePath; | 745 | QString fileS, mediaLocation, fileDate, filePath; |
739 | 746 | ||
740 | temp.sprintf( "%d",i); | 747 | temp.sprintf( "%d",i); |
741 | temp = cfg.readEntry( temp,""); //reads currentFile | 748 | temp = cfg.readEntry( temp,""); //reads currentFile |
742 | filePath = cfg.readEntry( temp,""); //currentFileName | 749 | filePath = cfg.readEntry( temp,""); //currentFileName |
743 | 750 | ||
744 | QFileInfo info(filePath); | 751 | QFileInfo info(filePath); |
745 | fileDate = info.lastModified().toString(); | 752 | fileDate = info.lastModified().toString(); |
746 | 753 | ||
747 | fileS = cfg.readEntry( filePath, "0" );// file length in seconds | 754 | fileS = cfg.readEntry( filePath, "0" );// file length in seconds |
748 | mediaLocation = getStorage( filePath); | 755 | mediaLocation = getStorage( filePath); |
749 | if( info.exists()) { | 756 | if( info.exists()) { |
750 | item = new QListViewItem( ListView1, temp, fileS /*, mediaLocation, fileDate*/); | 757 | item = new QListViewItem( ListView1, temp, fileS /*, mediaLocation, fileDate*/); |
751 | item->setPixmap( 0, image0); | 758 | item->setPixmap( 0, image0); |
752 | if( currentFileName == filePath) | 759 | if( currentFileName == filePath) |
753 | ListView1->setSelected( item, true); | 760 | ListView1->setSelected( item, true); |
754 | } | 761 | } |
755 | } | 762 | } |
756 | } | 763 | } |
757 | 764 | ||
758 | void QtRec::initConnections() { | 765 | void QtRec::initConnections() { |
759 | connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); | 766 | connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); |
760 | 767 | ||
761 | connect( toBeginningButton, SIGNAL( pressed()), | 768 | connect( toBeginningButton, SIGNAL( pressed()), |
762 | this, SLOT( rewindPressed() )); | 769 | this, SLOT( rewindPressed() )); |
763 | connect( toBeginningButton, SIGNAL( released()), | 770 | connect( toBeginningButton, SIGNAL( released()), |
764 | this, SLOT( rewindReleased() )); | 771 | this, SLOT( rewindReleased() )); |
765 | connect( toEndButton, SIGNAL( pressed()), | 772 | connect( toEndButton, SIGNAL( pressed()), |
766 | this, SLOT( FastforwardPressed() )); | 773 | this, SLOT( FastforwardPressed() )); |
767 | connect( toEndButton, SIGNAL( released()), | 774 | connect( toEndButton, SIGNAL( released()), |
768 | this, SLOT( FastforwardReleased() )); | 775 | this, SLOT( FastforwardReleased() )); |
769 | connect( deleteSoundButton, SIGNAL(released()), | 776 | connect( deleteSoundButton, SIGNAL(released()), |
770 | this, SLOT( deleteSound() )); | 777 | this, SLOT( deleteSound() )); |
771 | connect( Stop_PushButton, SIGNAL(released()), | 778 | connect( Stop_PushButton, SIGNAL(released()), |
772 | this, SLOT( doPlayBtn() )); | 779 | this, SLOT( doPlayBtn() )); |
773 | connect( Rec_PushButton, SIGNAL(released()), | 780 | connect( Rec_PushButton, SIGNAL(released()), |
774 | this, SLOT( newSound() ) ); | 781 | this, SLOT( newSound() ) ); |
775 | connect( TabWidget, SIGNAL( currentChanged(QWidget*)), | 782 | connect( TabWidget, SIGNAL( currentChanged(QWidget*)), |
776 | this, SLOT(thisTab(QWidget*) )); | 783 | this, SLOT(thisTab(QWidget*) )); |
777 | connect( OutputSlider, SIGNAL(sliderReleased()), | 784 | connect( OutputSlider, SIGNAL(sliderReleased()), |
778 | this, SLOT( changedOutVolume()) ); | 785 | this, SLOT( changedOutVolume()) ); |
779 | connect( InputSlider, SIGNAL(sliderReleased()), | 786 | connect( InputSlider, SIGNAL(sliderReleased()), |
780 | this, SLOT( changedInVolume()) ); | 787 | this, SLOT( changedInVolume()) ); |
781 | 788 | ||
782 | connect( sampleRateComboBox, SIGNAL(activated(int)), | 789 | connect( sampleRateComboBox, SIGNAL(activated(int)), |
783 | this, SLOT( changesamplerateCombo(int)) ); | 790 | this, SLOT( changesamplerateCombo(int)) ); |
784 | connect( bitRateComboBox, SIGNAL(activated(int)), | 791 | connect( bitRateComboBox, SIGNAL(activated(int)), |
785 | this, SLOT( changebitrateCombo(int)) ); | 792 | this, SLOT( changebitrateCombo(int)) ); |
786 | 793 | ||
787 | connect( directoryComboBox, SIGNAL(activated(int)), | 794 | connect( directoryComboBox, SIGNAL(activated(int)), |
788 | this, SLOT( changeDirCombo(int)) ); | 795 | this, SLOT( changeDirCombo(int)) ); |
789 | connect( sizeLimitCombo, SIGNAL(activated(int)), | 796 | connect( sizeLimitCombo, SIGNAL(activated(int)), |
790 | this, SLOT( changeSizeLimitCombo(int)) ); | 797 | this, SLOT( changeSizeLimitCombo(int)) ); |
791 | 798 | ||
792 | connect( stereoCheckBox, SIGNAL(toggled(bool)), | 799 | connect( stereoCheckBox, SIGNAL(toggled(bool)), |
793 | this, SLOT( changeStereoCheck(bool)) ); | 800 | this, SLOT( changeStereoCheck(bool)) ); |
794 | 801 | ||
795 | connect( outMuteCheckBox, SIGNAL(toggled(bool)), | 802 | connect( outMuteCheckBox, SIGNAL(toggled(bool)), |
796 | this, SLOT( doVolMuting(bool)) ); | 803 | this, SLOT( doVolMuting(bool)) ); |
797 | connect( inMuteCheckBox , SIGNAL(toggled(bool)), | 804 | connect( inMuteCheckBox , SIGNAL(toggled(bool)), |
798 | this, SLOT( doMicMuting(bool)) ); | 805 | this, SLOT( doMicMuting(bool)) ); |
799 | 806 | ||
800 | connect( ListView1,SIGNAL(doubleClicked(QListViewItem*)), | 807 | connect( ListView1,SIGNAL(doubleClicked(QListViewItem*)), |
801 | this,SLOT( itClick(QListViewItem*))); | 808 | this,SLOT( itClick(QListViewItem*))); |
802 | connect( ListView1, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int)), | 809 | connect( ListView1, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int)), |
803 | this,SLOT( listPressed(int,QListViewItem*,const QPoint&,int)) ); | 810 | this,SLOT( listPressed(int,QListViewItem*,const QPoint&,int)) ); |
804 | connect( timeSlider, SIGNAL( sliderMoved(int)), | 811 | connect( timeSlider, SIGNAL( sliderMoved(int)), |
805 | this, SLOT( changeTimeSlider(int) )); | 812 | this, SLOT( changeTimeSlider(int) )); |
806 | connect( timeSlider, SIGNAL( sliderPressed()), | 813 | connect( timeSlider, SIGNAL( sliderPressed()), |
807 | this, SLOT( timeSliderPressed() )); | 814 | this, SLOT( timeSliderPressed() )); |
808 | connect( timeSlider, SIGNAL( sliderReleased()), | 815 | connect( timeSlider, SIGNAL( sliderReleased()), |
809 | this, SLOT( timeSliderReleased() )); | 816 | this, SLOT( timeSliderReleased() )); |
810 | connect( compressionCheckBox, SIGNAL( toggled(bool)), | 817 | connect( compressionCheckBox, SIGNAL( toggled(bool)), |
811 | this, SLOT( compressionSelected(bool))); | 818 | this, SLOT( compressionSelected(bool))); |
812 | connect( autoMuteCheckBox, SIGNAL( toggled(bool)), | 819 | connect( autoMuteCheckBox, SIGNAL( toggled(bool)), |
813 | this, SLOT( slotAutoMute(bool))); | 820 | this, SLOT( slotAutoMute(bool))); |
814 | } | 821 | } |
815 | 822 | ||
816 | void QtRec::initConfig() { | 823 | void QtRec::initConfig() { |
817 | int index, fred, i; | 824 | int index, fred, i; |
818 | Config cfg("OpieRec"); | 825 | Config cfg("OpieRec"); |
819 | cfg.setGroup("Settings"); | 826 | cfg.setGroup("Settings"); |
820 | 827 | ||
821 | index = cfg.readNumEntry("samplerate",22050); | 828 | index = cfg.readNumEntry("samplerate",22050); |
822 | bool ok; | 829 | bool ok; |
823 | 830 | ||
824 | for(int ws=0;ws<sampleRateComboBox->count();ws++) { | 831 | for(int ws=0;ws<sampleRateComboBox->count();ws++) { |
825 | fred = sampleRateComboBox->text(ws).toInt(&ok, 10); | 832 | fred = sampleRateComboBox->text(ws).toInt(&ok, 10); |
826 | if( index == fred) { | 833 | if( index == fred) { |
827 | filePara.sampleRate = fred; | 834 | filePara.sampleRate = fred; |
828 | sampleRateComboBox->setCurrentItem(ws); | 835 | sampleRateComboBox->setCurrentItem(ws); |
829 | } | 836 | } |
830 | } | 837 | } |
831 | 838 | ||
832 | i = cfg.readNumEntry("bitrate",16); | 839 | i = cfg.readNumEntry("bitrate",16); |
833 | if(i == 16) | 840 | if(i == 16) |
834 | bitRateComboBox->setCurrentItem( 1); | 841 | bitRateComboBox->setCurrentItem( 1); |
835 | else if(i == 24) | 842 | else if(i == 24) |
836 | bitRateComboBox->setCurrentItem( 2); | 843 | bitRateComboBox->setCurrentItem( 2); |
837 | else if(i == 32) | 844 | else if(i == 32) |
838 | bitRateComboBox->setCurrentItem( 3); | 845 | bitRateComboBox->setCurrentItem( 3); |
839 | else | 846 | else |
840 | bitRateComboBox->setCurrentItem( 0); | 847 | bitRateComboBox->setCurrentItem( 0); |
841 | 848 | ||
842 | filePara.resolution = i; | 849 | filePara.resolution = i; |
843 | 850 | ||
844 | i = cfg.readNumEntry("sizeLimit", 5 ); | 851 | i = cfg.readNumEntry("sizeLimit", 5 ); |
845 | QString temp; | 852 | QString temp; |
846 | sizeLimitCombo->setCurrentItem((i/5)); | 853 | sizeLimitCombo->setCurrentItem((i/5)); |
847 | 854 | ||
848 | stereoCheckBox->setChecked( cfg.readBoolEntry("stereo", 1)); | 855 | stereoCheckBox->setChecked( cfg.readBoolEntry("stereo", 1)); |
849 | if( stereoCheckBox->isChecked()) { | 856 | if( stereoCheckBox->isChecked()) { |
850 | filePara.channels = 2; | 857 | filePara.channels = 2; |
851 | } else { | 858 | } else { |
852 | filePara.channels = 1; | 859 | filePara.channels = 1; |
853 | } | 860 | } |
854 | 861 | ||
855 | compressionCheckBox->setChecked( cfg.readBoolEntry("wavCompression",1)); | 862 | compressionCheckBox->setChecked( cfg.readBoolEntry("wavCompression",1)); |
856 | if( compressionCheckBox->isChecked()) { | 863 | if( compressionCheckBox->isChecked()) { |
857 | bitRateComboBox->setEnabled(false); | 864 | bitRateComboBox->setEnabled(false); |
858 | bitRateComboBox->setCurrentItem(0); | 865 | bitRateComboBox->setCurrentItem(0); |
859 | filePara.resolution=16; | 866 | filePara.resolution=16; |
860 | } | 867 | } |
861 | 868 | ||
862 | autoMuteCheckBox->setChecked( cfg.readBoolEntry("useAutoMute",0)); | 869 | autoMuteCheckBox->setChecked( cfg.readBoolEntry("useAutoMute",0)); |
863 | if( autoMuteCheckBox->isChecked()) | 870 | if( autoMuteCheckBox->isChecked()) |
864 | slotAutoMute(true); | 871 | slotAutoMute(true); |
865 | else | 872 | else |
866 | slotAutoMute(false); | 873 | slotAutoMute(false); |
867 | 874 | ||
868 | Config cofg( "qpe"); | 875 | Config cofg( "qpe"); |
869 | cofg.setGroup( "Volume"); | 876 | cofg.setGroup( "Volume"); |
870 | outMuteCheckBox->setChecked( cofg.readBoolEntry( "Mute",0)); | 877 | outMuteCheckBox->setChecked( cofg.readBoolEntry( "Mute",0)); |
871 | inMuteCheckBox->setChecked( cofg.readBoolEntry( "MicMute",0)); | 878 | inMuteCheckBox->setChecked( cofg.readBoolEntry( "MicMute",0)); |
872 | } | 879 | } |
873 | 880 | ||
874 | void QtRec::stop() { | 881 | void QtRec::stop() { |
875 | owarn << "STOP" << oendl; | 882 | owarn << "STOP" << oendl; |
876 | setRecordButton(false); | 883 | setRecordButton(false); |
877 | 884 | ||
878 | if( !recording) | 885 | if( !recording) |
879 | endPlaying(); | 886 | endPlaying(); |
880 | else | 887 | else |
881 | endRecording(); | 888 | endRecording(); |
882 | timeSlider->setValue(0); | 889 | timeSlider->setValue(0); |
883 | } | 890 | } |
884 | 891 | ||
885 | void QtRec::doPlayBtn() { | 892 | void QtRec::doPlayBtn() { |
886 | 893 | ||
887 | if(!stopped) { | 894 | if(!stopped) { |
888 | // playLabel2->setText(tr("Play")); | 895 | // playLabel2->setText(tr("Play")); |
889 | stop(); | 896 | stop(); |
890 | } else { | 897 | } else { |
891 | if(ListView1->currentItem() == 0) return; | 898 | if(ListView1->currentItem() == 0) return; |
892 | // playLabel2->setText(tr("Stop")); | 899 | // playLabel2->setText(tr("Stop")); |
893 | currentFile = ListView1->currentItem()->text(0); | 900 | currentFile = ListView1->currentItem()->text(0); |
894 | start(); | 901 | start(); |
895 | } | 902 | } |
896 | } | 903 | } |
897 | 904 | ||
898 | void QtRec::start() { //play | 905 | void QtRec::start() { //play |
899 | if( stopped) { | 906 | if( stopped) { |
900 | QPixmap image3( ( const char** ) image3_data ); | 907 | QPixmap image3( ( const char** ) image3_data ); |
901 | Stop_PushButton->setPixmap( image3 ); | 908 | Stop_PushButton->setPixmap( image3 ); |
902 | Stop_PushButton->setDown( true); | 909 | Stop_PushButton->setDown( true); |
903 | stopped = false; | 910 | stopped = false; |
904 | paused = false; | 911 | paused = false; |
905 | secCount = 1; | 912 | secCount = 1; |
906 | 913 | ||
907 | if( openPlayFile()) | 914 | if( openPlayFile()) |
908 | if( setupAudio( false)) //recording is false | 915 | if( setupAudio( false)) //recording is false |
909 | doPlay(); | 916 | doPlay(); |
910 | } | 917 | } |
911 | } | 918 | } |
912 | 919 | ||
913 | bool QtRec::rec() { //record | 920 | bool QtRec::rec() { //record |
914 | QString timeString; | 921 | QString timeString; |
915 | timeString.sprintf("%.0f", 0.0); | 922 | timeString.sprintf("%.0f", 0.0); |
916 | // timeLabel->setText( timeString+ " seconds"); | 923 | // timeLabel->setText( timeString+ " seconds"); |
917 | if(!stopped) { | 924 | if(!stopped) { |
918 | monitoring = true; | 925 | monitoring = true; |
919 | return false; | 926 | return false; |
920 | } else { | 927 | } else { |
921 | secCount = 1; | 928 | secCount = 1; |
922 | // playLabel2->setText(tr("Stop")); | 929 | // playLabel2->setText(tr("Stop")); |
923 | monitoring = false; | 930 | monitoring = false; |
924 | setRecordButton( true); | 931 | setRecordButton( true); |
925 | 932 | ||
926 | if( setupAudio( true)) | 933 | if( setupAudio( true)) |
927 | if(setUpFile()) { | 934 | if(setUpFile()) { |
928 | int fileSize = 0; | 935 | int fileSize = 0; |
929 | Config cfg("OpieRec"); | 936 | Config cfg("OpieRec"); |
930 | cfg.setGroup("Settings"); | 937 | cfg.setGroup("Settings"); |
931 | // odebug << "<<<<<<<Device bits " << soundDevice->getDeviceBits() | 938 | // odebug << "<<<<<<<Device bits " << soundDevice->getDeviceBits() |
932 | // << ", device rate " << soundDevice->getDeviceRate() | 939 | // << ", device rate " << soundDevice->getDeviceRate() |
933 | // << ", device channels " << soundDevice->getDeviceChannels() << oendl; | 940 | // << ", device channels " << soundDevice->getDeviceChannels() << oendl; |
934 | 941 | ||
935 | //filePara.sampleRate = cfg.readNumEntry("samplerate", 22050); | 942 | //filePara.sampleRate = cfg.readNumEntry("samplerate", 22050); |
936 | // odebug << "sample rate is " << filePara.sampleRate << "" << oendl; | 943 | // odebug << "sample rate is " << filePara.sampleRate << "" << oendl; |
937 | filePara.SecondsToRecord = getCurrentSizeLimit(); | 944 | filePara.SecondsToRecord = getCurrentSizeLimit(); |
938 | 945 | ||
939 | // odebug << "size limit " << filePara.SecondsToRecord << " sec" << oendl; | 946 | // odebug << "size limit " << filePara.SecondsToRecord << " sec" << oendl; |
940 | int diskSize = checkDiskSpace( (const QString &) wavFile->trackName()); | 947 | int diskSize = checkDiskSpace( (const QString &) wavFile->trackName()); |
941 | 948 | ||
942 | if( filePara.SecondsToRecord == 0) { | 949 | if( filePara.SecondsToRecord == 0) { |
943 | fileSize = diskSize; | 950 | fileSize = diskSize; |
944 | } else if( filePara.format == WAVE_FORMAT_PCM) { | 951 | } else if( filePara.format == WAVE_FORMAT_PCM) { |
945 | // odebug << "WAVE_FORMAT_PCM" << oendl; | 952 | // odebug << "WAVE_FORMAT_PCM" << oendl; |
946 | fileSize = (filePara.SecondsToRecord ) * filePara.channels | 953 | fileSize = (filePara.SecondsToRecord ) * filePara.channels |
947 | * filePara.sampleRate * ( filePara.resolution / 8) + 1000; | 954 | * filePara.sampleRate * ( filePara.resolution / 8) + 1000; |
948 | } else { | 955 | } else { |
949 | // odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl; | 956 | // odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl; |
950 | fileSize = ((filePara.SecondsToRecord) * filePara.channels | 957 | fileSize = ((filePara.SecondsToRecord) * filePara.channels |
951 | * filePara.sampleRate * ( filePara.resolution / 8) ) / 4 + 250; | 958 | * filePara.sampleRate * ( filePara.resolution / 8) ) / 4 + 250; |
952 | } | 959 | } |
953 | 960 | ||
954 | filePara.samplesToRecord = fileSize; | 961 | filePara.samplesToRecord = fileSize; |
955 | odebug << "filesize should be " << filePara.samplesToRecord | 962 | odebug << "filesize should be " << filePara.samplesToRecord |
956 | << ", bits " << filePara.resolution << ", rate " << filePara.sampleRate; | 963 | << ", bits " << filePara.resolution << ", rate " << filePara.sampleRate; |
957 | if( paused) { | 964 | if( paused) { |
958 | paused = false; | 965 | paused = false; |
959 | } | 966 | } |
960 | // else { | 967 | // else { |
961 | odebug << "Setting timeslider " << filePara.samplesToRecord << "" << oendl; | 968 | odebug << "Setting timeslider " << filePara.samplesToRecord << "" << oendl; |
962 | // if(fileSize != 0) | 969 | // if(fileSize != 0) |
963 | timeSlider->setRange(0, filePara.samplesToRecord); | 970 | timeSlider->setRange(0, filePara.samplesToRecord); |
964 | // } | 971 | // } |
965 | 972 | ||
966 | if( diskSize < fileSize/1024) { | 973 | if( diskSize < fileSize/1024) { |
967 | QMessageBox::warning(this, | 974 | QMessageBox::warning(this, |
968 | tr("Low Disk Space"), | 975 | tr("Low Disk Space"), |
969 | tr("You are running low of\nrecording space\n" | 976 | tr("You are running low of\nrecording space\n" |
970 | "or a card isn't being recognized")); | 977 | "or a card isn't being recognized")); |
971 | stopped = true; //we need to be stopped | 978 | stopped = true; //we need to be stopped |
972 | stop(); | 979 | stop(); |
973 | } else { | 980 | } else { |
974 | QString msg; | 981 | QString msg; |
975 | msg.sprintf("%d, %d, %d", filePara.sampleRate, filePara.channels, filePara.resolution); | 982 | msg.sprintf("%d, %d, %d", filePara.sampleRate, filePara.channels, filePara.resolution); |
976 | #ifdef DEV_VERSION | 983 | #ifdef DEV_VERSION |
977 | setCaption( msg); | 984 | setCaption( msg); |
978 | #endif | 985 | #endif |
979 | filePara.fileName=currentFile.latin1(); | 986 | filePara.fileName=currentFile.latin1(); |
980 | odebug << "Start recording" << oendl; | 987 | odebug << "Start recording" << oendl; |
981 | stopped = false; | 988 | stopped = false; |
982 | 989 | ||
983 | #ifdef THREADED | 990 | #ifdef THREADED |
984 | odebug << "Start recording thread" << oendl; | 991 | odebug << "Start recording thread" << oendl; |
985 | pthread_t thread1; | 992 | pthread_t thread1; |
986 | pthread_create( &thread1, NULL, (void * (*)(void *))quickRec, NULL/* &*/); | 993 | pthread_create( &thread1, NULL, (void * (*)(void *))quickRec, NULL/* &*/); |
987 | #endif | 994 | #endif |
988 | toBeginningButton->setEnabled( false); | 995 | toBeginningButton->setEnabled( false); |
989 | toEndButton->setEnabled( false); | 996 | toEndButton->setEnabled( false); |
990 | 997 | ||
991 | startTimer(1000); | 998 | startTimer(1000); |
992 | #ifndef THREADED | 999 | #ifndef THREADED |
993 | quickRec(); | 1000 | quickRec(); |
994 | #endif | 1001 | #endif |
995 | } | 1002 | } |
996 | } //end setUpFile | 1003 | } //end setUpFile |
997 | } //end setupAudio | 1004 | } //end setupAudio |
998 | return true; | 1005 | return true; |
999 | } | 1006 | } |
1000 | /* | 1007 | /* |
1001 | This happens when a tab is selected*/ | 1008 | This happens when a tab is selected*/ |
1002 | void QtRec::thisTab(QWidget* widg) { | 1009 | void QtRec::thisTab(QWidget* widg) { |
1003 | if(widg != NULL) { | 1010 | if(widg != NULL) { |
1004 | int index = TabWidget->currentPageIndex(); | 1011 | int index = TabWidget->currentPageIndex(); |
1005 | 1012 | ||
1006 | if(index == 0) { //file page | 1013 | if(index == 0) { //file page |
1007 | } | 1014 | } |
1008 | 1015 | ||
1009 | if(index == 1) { //control page | 1016 | if(index == 1) { //control page |
1010 | fillDirectoryCombo(); | 1017 | fillDirectoryCombo(); |
1011 | // soundDevice->getOutVol(); | 1018 | // soundDevice->getOutVol(); |
1012 | // soundDevice->getInVol(); | 1019 | // soundDevice->getInVol(); |
1013 | } | 1020 | } |
1014 | 1021 | ||
1015 | if( index==2) { //help page | 1022 | if( index==2) { //help page |
1016 | } | 1023 | } |
1017 | 1024 | ||
1018 | qApp->processEvents(); | 1025 | qApp->processEvents(); |
1019 | update(); | 1026 | update(); |
1020 | } | 1027 | } |
1021 | } | 1028 | } |
1022 | 1029 | ||
1023 | void QtRec::getOutVol( ) { | 1030 | void QtRec::getOutVol( ) { |
1024 | filePara.outVol = soundDevice->getOutVolume(); | 1031 | filePara.outVol = soundDevice->getOutVolume(); |
1025 | // odebug << "out vol " << filePara.outVol << "" << oendl; | 1032 | // odebug << "out vol " << filePara.outVol << "" << oendl; |
1026 | OutputSlider->setValue( -filePara.outVol); | 1033 | OutputSlider->setValue( -filePara.outVol); |
1027 | } | 1034 | } |
1028 | 1035 | ||
1029 | void QtRec::getInVol() { | 1036 | void QtRec::getInVol() { |
1030 | filePara.inVol = soundDevice->getInVolume(); | 1037 | filePara.inVol = soundDevice->getInVolume(); |
1031 | // odebug << "in vol " << filePara.inVol << "" << oendl; | 1038 | // odebug << "in vol " << filePara.inVol << "" << oendl; |
1032 | InputSlider->setValue( -filePara.inVol); | 1039 | InputSlider->setValue( -filePara.inVol); |
1033 | } | 1040 | } |
1034 | 1041 | ||
1035 | void QtRec::changedOutVolume() { | 1042 | void QtRec::changedOutVolume() { |
1036 | soundDevice->changedOutVolume( -OutputSlider->value()); | 1043 | soundDevice->changedOutVolume( -OutputSlider->value()); |
1037 | } | 1044 | } |
1038 | 1045 | ||
1039 | void QtRec::changedInVolume( ) { | 1046 | void QtRec::changedInVolume( ) { |
1040 | soundDevice->changedInVolume( -InputSlider->value()); | 1047 | soundDevice->changedInVolume( -InputSlider->value()); |
1041 | } | 1048 | } |
1042 | 1049 | ||
1043 | 1050 | ||
1044 | bool QtRec::setupAudio( bool b) { | 1051 | bool QtRec::setupAudio( bool b) { |
1045 | bool ok; | 1052 | bool ok; |
1046 | int sampleformat, stereo, flags; | 1053 | int sampleformat, stereo, flags; |
1047 | QString dspString, mixerString; | 1054 | QString dspString, mixerString; |
1048 | 1055 | ||
1049 | filePara.resolution = bitRateComboBox->currentText().toInt( &ok,10); //16 | 1056 | filePara.resolution = bitRateComboBox->currentText().toInt( &ok,10); //16 |
1050 | 1057 | ||
1051 | if( !b) { | 1058 | if( !b) { |
1052 | // we want to play | 1059 | // we want to play |
1053 | #ifdef PDAUDIO //ALSA | 1060 | #ifdef PDAUDIO //ALSA |
1054 | if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { | 1061 | if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { |
1055 | sampleformat = SND_PCM_FORMAT_S16; | 1062 | sampleformat = SND_PCM_FORMAT_S16; |
1056 | filePara.resolution = 16; | 1063 | filePara.resolution = 16; |
1057 | } else if( filePara.resolution == 24 || compressionCheckBox->isChecked() ) { | 1064 | } else if( filePara.resolution == 24 || compressionCheckBox->isChecked() ) { |
1058 | sampleformat = SND_PCM_FORMAT_S24; | 1065 | sampleformat = SND_PCM_FORMAT_S24; |
1059 | filePara.resolution = 24; | 1066 | filePara.resolution = 24; |
1060 | } else if( filePara.resolution == 32 || compressionCheckBox->isChecked() ) { | 1067 | } else if( filePara.resolution == 32 || compressionCheckBox->isChecked() ) { |
1061 | sampleformat = SND_PCM_FORMAT_S32; | 1068 | sampleformat = SND_PCM_FORMAT_S32; |
1062 | filePara.resolution = 32; | 1069 | filePara.resolution = 32; |
1063 | } else { | 1070 | } else { |
1064 | sampleformat = SND_PCM_FORMAT_U8; | 1071 | sampleformat = SND_PCM_FORMAT_U8; |
1065 | filePara.resolution = 8; | 1072 | filePara.resolution = 8; |
1066 | } | 1073 | } |
1067 | #else | 1074 | #else |
1068 | // we want to play | 1075 | // we want to play |
1069 | if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { | 1076 | if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { |
1070 | sampleformat = AFMT_S16_LE; | 1077 | sampleformat = AFMT_S16_LE; |
1071 | filePara.resolution = 16; | 1078 | filePara.resolution = 16; |
1072 | } else { | 1079 | } else { |
1073 | sampleformat = AFMT_U8; | 1080 | sampleformat = AFMT_U8; |
1074 | filePara.resolution = 8; | 1081 | filePara.resolution = 8; |
1075 | } | 1082 | } |
1076 | #endif | 1083 | #endif |
1077 | 1084 | ||
1078 | stereo = filePara.channels; | 1085 | stereo = filePara.channels; |
1079 | flags = O_WRONLY; | 1086 | flags = O_WRONLY; |
1080 | Config hwcfg("OpieRec"); | 1087 | Config hwcfg("OpieRec"); |
1081 | hwcfg.setGroup("Hardware"); | 1088 | hwcfg.setGroup("Hardware"); |
1082 | dspString = hwcfg.readEntry( "Audio", DSPSTROUT); | 1089 | dspString = hwcfg.readEntry( "Audio", DSPSTROUT); |
1083 | mixerString = hwcfg.readEntry( "Mixer", DSPSTRMIXEROUT); | 1090 | mixerString = hwcfg.readEntry( "Mixer", DSPSTRMIXEROUT); |
1084 | recording = false; | 1091 | recording = false; |
1085 | } else { // we want to record | 1092 | } else { // we want to record |
1086 | 1093 | ||
1087 | #ifdef PDAUDIO //ALSA | 1094 | #ifdef PDAUDIO //ALSA |
1088 | if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") | 1095 | if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") |
1089 | sampleformat = SND_PCM_FORMAT_S16; | 1096 | sampleformat = SND_PCM_FORMAT_S16; |
1090 | else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "24") | 1097 | else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "24") |
1091 | sampleformat = SND_PCM_FORMAT_S24; | 1098 | sampleformat = SND_PCM_FORMAT_S24; |
1092 | else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "32") | 1099 | else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "32") |
1093 | sampleformat = SND_PCM_FORMAT_S32; | 1100 | sampleformat = SND_PCM_FORMAT_S32; |
1094 | else | 1101 | else |
1095 | sampleformat = SND_PCM_FORMAT_U8; | 1102 | sampleformat = SND_PCM_FORMAT_U8; |
1096 | 1103 | ||
1097 | #else | 1104 | #else |
1098 | if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") | 1105 | if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") |
1099 | sampleformat = AFMT_S16_LE; | 1106 | sampleformat = AFMT_S16_LE; |
1100 | else | 1107 | else |
1101 | sampleformat = AFMT_U8; | 1108 | sampleformat = AFMT_U8; |
1102 | 1109 | ||
1103 | if( !compressionCheckBox->isChecked()) { | 1110 | if( !compressionCheckBox->isChecked()) { |
1104 | filePara.format = WAVE_FORMAT_PCM; | 1111 | filePara.format = WAVE_FORMAT_PCM; |
1105 | // odebug << "WAVE_FORMAT_PCM" << oendl; | 1112 | // odebug << "WAVE_FORMAT_PCM" << oendl; |
1106 | } else { | 1113 | } else { |
1107 | filePara.format = WAVE_FORMAT_DVI_ADPCM; | 1114 | filePara.format = WAVE_FORMAT_DVI_ADPCM; |
1108 | sampleformat = AFMT_S16_LE; | 1115 | sampleformat = AFMT_S16_LE; |
1109 | // odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl; | 1116 | // odebug << "WAVE_FORMAT_DVI_ADPCM" << oendl; |