不能播放Tinycap的录音文件

按照网上说的教程来用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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值