不能播放Tinycap的录音文件

it2022-05-05  110

按照网上说的教程来用tinycap录音,比如:

 

按他们说的用ctrl+c 这样数据就会存下来。

但是我把c.wav从手机里取出后播放时,说打不开。从UltraEdit打开后,发现文件头是空的。

原因应该是这样的,

void sigint_handler(int sig) {     capturing = 0; }

unsigned int capture_sample(FILE *file, unsigned int card, unsigned int device,                             unsigned int channels, unsigned int rate,                             enum pcm_format format, unsigned int period_size,                             unsigned int period_count) {

...

    while (capturing && !pcm_read(pcm, buffer, size)) {         if (fwrite(buffer, 1, size, file) != size) {             fprintf(stderr,"Error capturing sample\n");             break;         }         bytes_read += size;     }

...

int main(int argc, char **argv)

...

    /* install signal handler and begin capturing */     signal(SIGINT, sigint_handler);     frames = capture_sample(file, card, device, header.num_channels,                             header.sample_rate, format,                             period_size, period_count);     printf("Captured %d frames\n", frames);

    /* write header now all information is known */     header.data_sz = frames * header.block_align;     header.riff_sz = header.data_sz + sizeof(header) - 8;     fseek(file, 0, SEEK_SET);     fwrite(&header, sizeof(struct wav_header), 1, file);

    fclose(file);

...

在执行capture_sample循环时,如果收到SIGINT信号,那么capturing=0录音循环结束。代码继续走下去写入文件头,然后关闭文件。

现在发现没有写入文件头,那么就是在adb里执行ctrl+c,直接关闭了tinycap程序,没有后续的写文件头操作。

所以,我们通过adb连接到手机执行ctrl+c是不能发送SIGINT的信号的,这样导致不能正常录音。

我采取的操作是,开两个窗口一个,一个录音,一个发SIGINT

 

发送SIGINT,kill -2 或者kill -SIGINT都可以。tinycap收到SIGINT后,打出log:Captured 1318912 frames

 

 


最新回复(0)