シェルで実行されるコマンドとプログラムで実行されるコマンドの違いは何ですか?

シェルで実行されるコマンドとプログラムで実行されるコマンドの違いは何ですか?

aplayがWaveファイルを再生し続けることをテストしたかったので、まずシェルウィンドウで2つの異なるコマンドを試しました(ターゲットをパテ)。

aplay -P -c 1 -t raw -r 16000 -f S16_LE audio/test1.raw

aplay -P -c 1 -t wav -r 32000 -f S16_LE audio/test2.wav

どちらも働いています。

これで、C++を使用して自動的に実行される単純なプログラムmain()を作成しました。

    char ac[100] = {0};
    int n = 0;
    while (1)
    {
        printf("---%d \n", ++n);
        strcpy(ac, "sudo nice -n -10 aplay -P -c 1 -t raw -r 16000 -f S16_LE audio/test1.raw");
        system(ac);

        delay(1000); //delay 1s

        strcpy(ac, "sudo nice -n -10 aplay -P -c 1 -t wav -r 32000 -f S16_LE audio/test2.wav");
        system(ac);
        delay(1000);
    }

遅延()機能:

int delay(int nMs)
{
    struct timespec requested_time, remaining;
    requested_time.tv_nsec = (nMs%1000)*1000000;
    requested_time.tv_sec = (nMs/1000);
    return nanosleep (&requested_time, &remaining);
}

その結果、aplayがtest2.wavで停止しました。

root@linaro-ubuntu-desktop:/TEST# sudo nice -n -10 aplay -P -c 1 -t raw -r 16000 -f S16_LE audio/test1.raw
Playing raw data 'audio/test1.raw' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono  --- ok, heard 
root@linaro-ubuntu-desktop:/TEST# sudo nice -n -10 aplay -P -c 1 -t wav -r 32000 -f S16_LE audio/test2.wav
Playing WAVE 'audio/test2.wav' : Signed 16 bit Little Endian, Rate 32000 Hz, Mono   --- ok, heard 

root@linaro-ubuntu-desktop:/TEST# ./Test
--- 1
Playing raw data 'audio/test1.raw' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
Playing WAVE 'audio/test2.wav' : Signed 16 bit Little Endian, Rate 32000 Hz, Mono --- ok, heard
^CAborted by signal Interrupt...
--- 2
Playing raw data 'audio/test1.raw' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono --- nok, no sound, hang
^CAborted by signal Interrupt...
Playing WAVE 'audio/test2.wav' : Signed 16 bit Little Endian, Rate 32000 Hz, Mono  --- nok, no sound, hang
^CAborted by signal Interrupt...
--- 3
Playing raw data 'audio/test1.raw' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono --- nok, no sound, hang
^CAborted by signal Interrupt...
^C

これは私が知っている範囲を超えた問題です...誰もが説明し、それを防ぐ方法を助けることができますか?私が使用しているオペレーティングシステムは次のとおりです。

lsb_release -a:
No LSB modules are available.
Distributor ID: Linaro
Description:    Linaro 11.10 (development branch)
Release:        11.10
Codename:       oneiric

cat /proc/version:
Linux version 3.0.35-2666-gbdde708 (root@jt-G31M-S2L) (gcc version 4.6.2 20110630 (prerelease) (Freescale MAD -- Linaro 2011.07 -- Built at 2011/08/10 09:20) ) #14 SMP PREEMPT Thu May 26 11:21:54 CST 2016

サウンドカードはwm8962-audioです。

関連情報