marziehk
شنبه 09 آبان 1394, 13:05 عصر
با سلام دریک برنامه که من قطعه ای از آن را در اینجا قرار می دهم هدر یک فایل wav خوانده می شود و در متغییرهایی ریخته می شود من می خواستم بدونم متغیر (4) c چه اطلاعاتی را در خود نگهداری می کند آیا حذف آن از قسمت بررسی شرط ها در if مشکلی در برنامه ایجاد می کند. من یک فایل wav با نرخ نمونه برداری 8000 هرتز و 16 بیت برای هر نمونه ایجاد کرده ام ولی بررسی این شرط اجازه استفاده از آن را در برنامه نمی دهد. [ fpi, emsg ] = fopen( [path,file], 'r' ); fHdrOffset = WAVHDRSIZE;
guiIfile = file;
% READ WAVE FILE HEADER
rID = fread( fpi, 4, 'char' );
rLen = fread( fpi, 1, 'long' );
wId = fread( fpi, 4, 'char' );
ChunkID = fread( fpi, 4, 'char' );
fLen = fread( fpi, 1, 'long' );
wFormatTag = fread( fpi, 1, 'short' );
nChannels = fread( fpi, 1, 'short' );
nSamplesPerSec = fread( fpi, 1, 'long' );
nAvgBytesPerSec = fread( fpi, 1, 'long' );
nBlockAlign = fread( fpi, 1, 'short' );
FormatSpecific = fread( fpi, fLen-14, 'char' );
dId = fread( fpi, 4, 'char' );
dLen = fread( fpi, 1, 'long' );
% VERIFY VALID .WAV FILE HAS BEEN SELECTED
WORDSIZE = nBlockAlign;
FSAMP = nSamplesPerSec;
c = zeros( 9, 1 );
c(1) = strcmp( setstr( rID )', 'RIFF' );
c(2) = strcmp( setstr( wId )', 'WAVE' );
c(3) = strcmp( setstr( ChunkID )', 'fmt ' );
c(4) = strcmp( setstr( dId )', 'data' );
c(5) = (wFormatTag == 1);
c(6) = (nChannels == 1);
c(7) = (nAvgBytesPerSec == (FSAMP * WORDSIZE));
c(8) = WORDSIZE == 2;
c(9) = FSAMP == 8000;
if sum(c) ~= length(c)
if ~c(1) || ~c(2) || ~c(3) || ~c(4) || ~c(7)
error( 'Invalid .WAV file: File header corrupted!' );
guiIfile = file;
% READ WAVE FILE HEADER
rID = fread( fpi, 4, 'char' );
rLen = fread( fpi, 1, 'long' );
wId = fread( fpi, 4, 'char' );
ChunkID = fread( fpi, 4, 'char' );
fLen = fread( fpi, 1, 'long' );
wFormatTag = fread( fpi, 1, 'short' );
nChannels = fread( fpi, 1, 'short' );
nSamplesPerSec = fread( fpi, 1, 'long' );
nAvgBytesPerSec = fread( fpi, 1, 'long' );
nBlockAlign = fread( fpi, 1, 'short' );
FormatSpecific = fread( fpi, fLen-14, 'char' );
dId = fread( fpi, 4, 'char' );
dLen = fread( fpi, 1, 'long' );
% VERIFY VALID .WAV FILE HAS BEEN SELECTED
WORDSIZE = nBlockAlign;
FSAMP = nSamplesPerSec;
c = zeros( 9, 1 );
c(1) = strcmp( setstr( rID )', 'RIFF' );
c(2) = strcmp( setstr( wId )', 'WAVE' );
c(3) = strcmp( setstr( ChunkID )', 'fmt ' );
c(4) = strcmp( setstr( dId )', 'data' );
c(5) = (wFormatTag == 1);
c(6) = (nChannels == 1);
c(7) = (nAvgBytesPerSec == (FSAMP * WORDSIZE));
c(8) = WORDSIZE == 2;
c(9) = FSAMP == 8000;
if sum(c) ~= length(c)
if ~c(1) || ~c(2) || ~c(3) || ~c(4) || ~c(7)
error( 'Invalid .WAV file: File header corrupted!' );