summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opierec/wavFile.cpp35
1 files changed, 20 insertions, 15 deletions
diff --git a/noncore/multimedia/opierec/wavFile.cpp b/noncore/multimedia/opierec/wavFile.cpp
index 7bfffb6..b177c91 100644
--- a/noncore/multimedia/opierec/wavFile.cpp
+++ b/noncore/multimedia/opierec/wavFile.cpp
@@ -20,33 +20,33 @@
20#include <stdio.h> 20#include <stdio.h>
21#include <stdlib.h> 21#include <stdlib.h>
22#include <unistd.h> 22#include <unistd.h>
23 23
24WavFile::WavFile( QObject * parent,const QString &fileName, bool makeNwFile, int sampleRate, 24WavFile::WavFile( QObject * parent,const QString &fileName, bool makeNwFile, int sampleRate,
25 int channels, int resolution, int format ) 25 int channels, int resolution, int format )
26 : QObject( parent) 26 : QObject( parent)
27{ 27{
28qDebug("new wave file"); 28//qDebug("new wave file");
29 bool b = makeNwFile; 29 bool b = makeNwFile;
30 wavSampleRate=sampleRate; 30 wavSampleRate=sampleRate;
31 wavFormat=format; 31 wavFormat=format;
32 wavChannels=channels; 32 wavChannels=channels;
33 wavResolution=resolution; 33 wavResolution=resolution;
34 useTmpFile=false; 34 useTmpFile=false;
35 if( b) { 35 if( b) {
36 newFile(); 36 newFile();
37 } else { 37 } else {
38 openFile(fileName); 38 openFile(fileName);
39 } 39 }
40} 40}
41 41
42bool WavFile::newFile() { 42bool WavFile::newFile() {
43 43
44 qDebug("Set up new file"); 44// qDebug("Set up new file");
45 Config cfg("OpieRec"); 45 Config cfg("OpieRec");
46 cfg.setGroup("Settings"); 46 cfg.setGroup("Settings");
47 47
48 currentFileName=cfg.readEntry("directory",QDir::homeDirPath()); 48 currentFileName=cfg.readEntry("directory",QDir::homeDirPath());
49 QString date; 49 QString date;
50 date = TimeString::dateString( QDateTime::currentDateTime(),false,true); 50 date = TimeString::dateString( QDateTime::currentDateTime(),false,true);
51 date.replace(QRegExp("'"),""); 51 date.replace(QRegExp("'"),"");
52 date.replace(QRegExp(" "),"_"); 52 date.replace(QRegExp(" "),"_");
@@ -55,27 +55,32 @@ bool WavFile::newFile() {
55 55
56 QString currentFile=date; 56 QString currentFile=date;
57 if(currentFileName.right(1).find("/",0,true) == -1) 57 if(currentFileName.right(1).find("/",0,true) == -1)
58 currentFileName += "/" + date; 58 currentFileName += "/" + date;
59 else 59 else
60 currentFileName += date; 60 currentFileName += date;
61 currentFileName+=".wav"; 61 currentFileName+=".wav";
62 62
63 qDebug("set up file for recording: "+currentFileName); 63// qDebug("set up file for recording: "+currentFileName);
64 char *pointer; 64 char pointer[] = "/tmp/opierec-XXXXXX";
65 int fd = 0;
65 66
66 if( currentFileName.find("/mnt",0,true) == -1 67 if( currentFileName.find("/mnt",0,true) == -1
67 && currentFileName.find("/tmp",0,true) == -1 ) { 68 && currentFileName.find("/tmp",0,true) == -1 ) {
68 // if destination file is most likely in flash (assuming jffs2) 69 // if destination file is most likely in flash (assuming jffs2)
69 // we have to write to a different filesystem first 70 // we have to write to a different filesystem first
70 71
71 useTmpFile = true; 72 useTmpFile = true;
72 pointer=tmpnam(NULL); 73 if(( fd = mkstemp( pointer)) < 0 ) {
73 qDebug("Opening tmp file %s",pointer); 74 perror("mkstemp failed");
75 return false;
76 }
77
78// qDebug("Opening tmp file %s",pointer);
74 track.setName( pointer); 79 track.setName( pointer);
75 80
76 } else { //just use regular file.. no moving 81 } else { //just use regular file.. no moving
77 82
78 useTmpFile = false; 83 useTmpFile = false;
79 track.setName( currentFileName); 84 track.setName( currentFileName);
80 } 85 }
81 if(!track.open( IO_ReadWrite | IO_Truncate)) { 86 if(!track.open( IO_ReadWrite | IO_Truncate)) {
@@ -96,17 +101,17 @@ WavFile::~WavFile() {
96} 101}
97 102
98void WavFile::closeFile() { 103void WavFile::closeFile() {
99 if(track.isOpen()) 104 if(track.isOpen())
100 track.close(); 105 track.close();
101} 106}
102 107
103int WavFile::openFile(const QString &currentFileName) { 108int WavFile::openFile(const QString &currentFileName) {
104 qDebug("open play file "+currentFileName); 109// qDebug("open play file "+currentFileName);
105 closeFile(); 110 closeFile();
106 111
107 track.setName(currentFileName); 112 track.setName(currentFileName);
108 113
109 if(!track.open(IO_ReadOnly)) { 114 if(!track.open(IO_ReadOnly)) {
110 QString errorMsg=(QString)strerror(errno); 115 QString errorMsg=(QString)strerror(errno);
111 qDebug("<<<<<<<<<<< "+errorMsg+currentFileName); 116 qDebug("<<<<<<<<<<< "+errorMsg+currentFileName);
112 QMessageBox::message("Note", "Error opening file.\n" +errorMsg); 117 QMessageBox::message("Note", "Error opening file.\n" +errorMsg);
@@ -121,51 +126,51 @@ bool WavFile::setWavHeader(int fd, wavhdr *hdr) {
121 126
122 strncpy((*hdr).riffID, "RIFF", 4); // RIFF 127 strncpy((*hdr).riffID, "RIFF", 4); // RIFF
123 strncpy((*hdr).wavID, "WAVE", 4); //WAVE 128 strncpy((*hdr).wavID, "WAVE", 4); //WAVE
124 strncpy((*hdr).fmtID, "fmt ", 4); // fmt 129 strncpy((*hdr).fmtID, "fmt ", 4); // fmt
125 (*hdr).fmtLen = 16; // format length = 16 130 (*hdr).fmtLen = 16; // format length = 16
126 131
127 if( wavFormat == WAVE_FORMAT_PCM) { 132 if( wavFormat == WAVE_FORMAT_PCM) {
128 (*hdr).fmtTag = 1; // PCM 133 (*hdr).fmtTag = 1; // PCM
129 qDebug("set header WAVE_FORMAT_PCM"); 134// qDebug("set header WAVE_FORMAT_PCM");
130 } 135 }
131 else { 136 else {
132 (*hdr).fmtTag = WAVE_FORMAT_DVI_ADPCM; //intel ADPCM 137 (*hdr).fmtTag = WAVE_FORMAT_DVI_ADPCM; //intel ADPCM
133 qDebug("set header WAVE_FORMAT_DVI_ADPCM"); 138 // qDebug("set header WAVE_FORMAT_DVI_ADPCM");
134 } 139 }
135 140
136 // (*hdr).nChannels = 1;//filePara.channels;// ? 2 : 1*/; // channels 141 // (*hdr).nChannels = 1;//filePara.channels;// ? 2 : 1*/; // channels
137 (*hdr).nChannels = wavChannels;// ? 2 : 1*/; // channels 142 (*hdr).nChannels = wavChannels;// ? 2 : 1*/; // channels
138 143
139 (*hdr).sampleRate = wavSampleRate; //samples per second 144 (*hdr).sampleRate = wavSampleRate; //samples per second
140 (*hdr).avgBytesPerSec = (wavSampleRate)*( wavChannels*(wavResolution/8)); // bytes per second 145 (*hdr).avgBytesPerSec = (wavSampleRate)*( wavChannels*(wavResolution/8)); // bytes per second
141 (*hdr).nBlockAlign = wavChannels*( wavResolution/8); //block align 146 (*hdr).nBlockAlign = wavChannels*( wavResolution/8); //block align
142 (*hdr).bitsPerSample = wavResolution; //bits per sample 8, or 16 147 (*hdr).bitsPerSample = wavResolution; //bits per sample 8, or 16
143 148
144 strncpy((*hdr).dataID, "data", 4); 149 strncpy((*hdr).dataID, "data", 4);
145 150
146 write( fd,hdr, sizeof(*hdr)); 151 write( fd,hdr, sizeof(*hdr));
147 qDebug("writing header: bitrate%d, samplerate %d, channels %d", 152// qDebug("writing header: bitrate%d, samplerate %d, channels %d",
148 wavResolution, wavSampleRate, wavChannels); 153// wavResolution, wavSampleRate, wavChannels);
149 return true; 154 return true;
150} 155}
151 156
152bool WavFile::adjustHeaders(int fd, int total) { 157bool WavFile::adjustHeaders(int fd, int total) {
153 lseek(fd, 4, SEEK_SET); 158 lseek(fd, 4, SEEK_SET);
154 int i = total + 36; 159 int i = total + 36;
155 write( fd, &i, sizeof(i)); 160 write( fd, &i, sizeof(i));
156 lseek( fd, 40, SEEK_SET); 161 lseek( fd, 40, SEEK_SET);
157 write( fd, &total, sizeof(total)); 162 write( fd, &total, sizeof(total));
158 qDebug("adjusting header %d", total); 163// qDebug("adjusting header %d", total);
159 return true; 164 return true;
160} 165}
161 166
162int WavFile::parseWavHeader(int fd) { 167int WavFile::parseWavHeader(int fd) {
163 qDebug("Parsing wav header"); 168// qDebug("Parsing wav header");
164 char string[4]; 169 char string[4];
165 int found; 170 int found;
166 short fmt; 171 short fmt;
167 unsigned short ch, bitrate; 172 unsigned short ch, bitrate;
168 unsigned long samplerrate, longdata; 173 unsigned long samplerrate, longdata;
169 174
170 if (read(fd, string, 4) < 4) { 175 if (read(fd, string, 4) < 4) {
171 qDebug(" Could not read from sound file.\n"); 176 qDebug(" Could not read from sound file.\n");
@@ -253,18 +258,18 @@ int WavFile::parseWavHeader(int fd) {
253 258
254 lseek(fd, longdata, SEEK_CUR); 259 lseek(fd, longdata, SEEK_CUR);
255 } else { 260 } else {
256 if (read(fd, &longdata, 4) < 4) { 261 if (read(fd, &longdata, 4) < 4) {
257 qDebug("Could not read from sound file.\n"); 262 qDebug("Could not read from sound file.\n");
258 return -1; 263 return -1;
259 } else { 264 } else {
260 wavNumberSamples = longdata; 265 wavNumberSamples = longdata;
261 qDebug("file has length of %d \nlasting %d seconds", longdata, 266 qDebug("file has length of %d \nlasting %d seconds", (int)longdata,
262 (( longdata / wavSampleRate) / wavChannels) / ( wavChannels*( wavResolution/8)) ); 267 (int)(( longdata / wavSampleRate) / wavChannels) / ( wavChannels*( wavResolution/8)) );
263// wavSeconds = (( longdata / wavSampleRate) / wavChannels) / ( wavChannels*( wavResolution/8)); 268// wavSeconds = (( longdata / wavSampleRate) / wavChannels) / ( wavChannels*( wavResolution/8));
264 269
265 return longdata; 270 return longdata;
266 } 271 }
267 } 272 }
268 } 273 }
269 274
270 lseek(fd, 0, SEEK_SET); 275 lseek(fd, 0, SEEK_SET);