아래 코드로 코어 오디오를 사용하여 구형파를 생성하려고합니다. AIFF 파일은 어떤 인자를 건네도 아무 것도 생성하지 않습니다. 샘플은 Kevin Avila의 Learning Core Audio입니다. http://www.amazon.com/Learning-Core-Audio-Hands-On-Programming/dp/0321636848코어 오디오를 사용하여 구형파를 생성하십시오.
어떤 아이디어입니까? 도와주세요!
main.m은 다음과 같습니다.
#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioToolbox.h>
#define SAMPLE_RATE 44100
#define DURATION 50.0
#define FILENAME_FORMAT @"%0.3f-square.aif"
int main (int argc, const char * argv[]) {
@autoreleasepool {
if (argc < 2) {
printf ("Usage: CAToneFileGenerator n\n(where n is tone in Hz)");
return -1;
}
double hz = atof(argv[1]);
assert (hz > 0);
NSLog (@"generating %f hz tone", hz);
NSString *fileName = [NSString stringWithFormat: FILENAME_FORMAT, hz];
NSString *filePath = [[[NSFileManager defaultManager] currentDirectoryPath]
stringByAppendingPathComponent: fileName]; NSURL *fileURL = [NSURL fileURLWithPath: filePath];
// Prepare the format
AudioStreamBasicDescription asbd;
memset(&asbd, 0, sizeof(asbd));
asbd.mSampleRate = SAMPLE_RATE;
asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mFormatFlags = kAudioFormatFlagIsBigEndian | kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
asbd.mBitsPerChannel = 16;
asbd.mChannelsPerFrame = 1;
asbd.mFramesPerPacket = 1;
asbd.mBytesPerFrame = 2; asbd.mBytesPerPacket = 2;
// Set up the file
AudioFileID audioFile;
OSStatus audioErr = noErr;
audioErr = AudioFileCreateWithURL((__bridge CFURLRef)fileURL,
kAudioFileAIFFType,
&asbd,
kAudioFileFlags_EraseFile,
&audioFile);
assert (audioErr == noErr);
// Start writing samples
long maxSampleCount = SAMPLE_RATE;
long sampleCount = 0;
UInt32 bytesToWrite = 2;
double wavelengthInSamples = SAMPLE_RATE/hz;
while (sampleCount < maxSampleCount) {
for (int i=0; i<wavelengthInSamples; i++) {
// Square wave
SInt16 sample;
if (i < wavelengthInSamples/2) {
sample = CFSwapInt16HostToBig (SHRT_MAX); } else {
sample = CFSwapInt16HostToBig (SHRT_MIN); }
audioErr = AudioFileWriteBytes(audioFile, false,
sampleCount*2, &bytesToWrite, &sample);
assert (audioErr == noErr); sampleCount++;
audioErr = AudioFileClose(audioFile); assert (audioErr == noErr);
NSLog (@"wrote %ld samples", sampleCount);
}
return 0;
}
}
}
고마워요. 나는 그 문제를 발견했다. 원래 코드가 잘 작동합니다. xcode의 버전은 5이고 원호는 yes로 설정됩니다. 호가 아니오로 설정되면 모든 것이 작동합니다. 정말 고마워요! –