private int aiff_check2(IFF_AIFF pcm_aiff_data) { if (pcm_aiff_data.sampleType != IFF_ID_SSND) { return(1); } switch (pcm_aiff_data.sampleSize) { case 32: case 24: case 16: case 8: break; default: return(1); } if (pcm_aiff_data.numChannels != 1 && pcm_aiff_data.numChannels != 2) { return(1); } if (pcm_aiff_data.blkAlgn.blockSize != 0) { return(1); } return(0); }
private int aiff_check2(IFF_AIFF pcm_aiff_data) { if (pcm_aiff_data.sampleType != IFF_ID_SSND) { if (parse.silent < 10) { Console.WriteLine("ERROR: input sound data is not PCM\n"); } return(1); } switch (pcm_aiff_data.sampleSize) { case 32: case 24: case 16: case 8: break; default: if (parse.silent < 10) { Console.WriteLine("ERROR: input sound data is not 8, 16, 24 or 32 bits\n"); } return(1); } if (pcm_aiff_data.numChannels != 1 && pcm_aiff_data.numChannels != 2) { if (parse.silent < 10) { Console.WriteLine("ERROR: input sound data is not mono or stereo\n"); } return(1); } if (pcm_aiff_data.blkAlgn.blockSize != 0) { if (parse.silent < 10) { Console.WriteLine("ERROR: block size of input sound data is not 0 bytes\n"); } return(1); } return(0); }
private int parse_aiff_header(LameGlobalFlags gfp, Stream sf) { int subSize = 0, dataType = IFF_ID_NONE; var aiff_info = new IFF_AIFF(); int seen_comm_chunk = 0, seen_ssnd_chunk = 0; long pcm_data_pos = -1; var chunkSize = Read32BitsHighLow(sf); var typeID = Read32BitsHighLow(sf); if (typeID != IFF_ID_AIFF && typeID != IFF_ID_AIFC) { return(-1); } while (chunkSize > 0) { long ckSize; var type = Read32BitsHighLow(sf); chunkSize -= 4; if (type == IFF_ID_COMM) { seen_comm_chunk = seen_ssnd_chunk + 1; subSize = Read32BitsHighLow(sf); ckSize = make_even_number_of_bytes_in_length(subSize); chunkSize -= (int)ckSize; aiff_info.numChannels = (short)Read16BitsHighLow(sf); ckSize -= 2; aiff_info.numSampleFrames = Read32BitsHighLow(sf); ckSize -= 4; aiff_info.sampleSize = (short)Read16BitsHighLow(sf); ckSize -= 2; try { aiff_info.sampleRate = readIeeeExtendedHighLow(sf); } catch (IOException) { return(-1); } ckSize -= 10; if (typeID == IFF_ID_AIFC) { dataType = Read32BitsHighLow(sf); ckSize -= 4; } try { sf.Seek((int)ckSize, SeekOrigin.Current); } catch (IOException) { return(-1); } } else if (type == IFF_ID_SSND) { seen_ssnd_chunk = 1; subSize = Read32BitsHighLow(sf); ckSize = make_even_number_of_bytes_in_length(subSize); chunkSize -= (int)ckSize; aiff_info.blkAlgn.offset = Read32BitsHighLow(sf); ckSize -= 4; aiff_info.blkAlgn.blockSize = Read32BitsHighLow(sf); ckSize -= 4; aiff_info.sampleType = IFF_ID_SSND; if (seen_comm_chunk > 0) { try { sf.Seek(aiff_info.blkAlgn.offset, SeekOrigin.Current); } catch (IOException) { return(-1); } break; } try { pcm_data_pos = sf.Position; } catch (IOException) { return(-1); } if (pcm_data_pos >= 0) { pcm_data_pos += aiff_info.blkAlgn.offset; } try { sf.Seek((int)ckSize, SeekOrigin.Current); } catch (IOException) { return(-1); } } else { subSize = Read32BitsHighLow(sf); ckSize = make_even_number_of_bytes_in_length(subSize); chunkSize -= (int)ckSize; try { sf.Seek((int)ckSize, SeekOrigin.Current); } catch (IOException) { return(-1); } } } if (dataType == IFF_ID_2CLE) { pcmswapbytes = parse.swapbytes; } else if (dataType == IFF_ID_2CBE) { pcmswapbytes = !parse.swapbytes; } else if (dataType == IFF_ID_NONE) { pcmswapbytes = !parse.swapbytes; } else { return(-1); } if (seen_comm_chunk != 0 && (seen_ssnd_chunk > 0 || aiff_info.numSampleFrames == 0)) { if (0 != aiff_check2(aiff_info)) { return(0); } if (-1 == (gfp.num_channels = aiff_info.numChannels)) { return(0); } gfp.in_samplerate = (int)aiff_info.sampleRate; gfp.num_samples = aiff_info.numSampleFrames; pcmbitwidth = aiff_info.sampleSize; pcm_is_unsigned_8bit = false; if (pcm_data_pos >= 0) { try { sf.Seek(pcm_data_pos, SeekOrigin.Begin); } catch (IOException) { return(0); } } return(1); } return(-1); }