2012-07-28 26 views
5

Tôi đang cố gắng để có được một âm thanh để chơi nhưng khi tôi mã:CFURLRef đòi hỏi một lỗi cast bắc cầu

AudioServicesCreateSystemSoundID ((CFURLRef) alertSound, &soundFileObject); 

nó ném các lỗi sau:

Cast của Objective-C kiểu con trỏ ' NSURL *' C con trỏ gõ 'CFURLRef'(aka 'struct __CFURL const *') đòi hỏi một lỗi cast bắc cầu

tôi đã thử cả hai sau đây giải pháp đề nghị:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject); 

hoặc

AudioServicesCreateSystemSoundID ((CFURLRef) CFBridgingRetain(alertSound), &soundFileObject); 

Nhưng tôi vẫn không thể có được những âm thanh để chơi.

Tôi đoán câu hỏi là: là lỗi bắc cầu nguyên nhân của âm thanh không phát hoặc tôi có nên tìm nơi khác không?

Tôi có thể phát âm thanh bằng cách sử dụng mã mẫu SysSound và tôi đang sử dụng iOS 6 và Xcode 4.5.

Thanks cho bất kỳ gợi ý :)

Trả lời

9

Dàn diễn viên có lẽ không phải là lý do âm thanh không được chơi:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject); 

là tốt.

Rất có thể lỗi của bạn nằm trong mã mà bạn chưa hiển thị cho chúng tôi. Một vấn đề phổ biến là một lỗi trong việc tạo URL hoặc định dạng tệp không hợp lệ.

Sửa đổi mã của bạn như sau:

OSStatus status = AudioServicesCreateSystemSoundID((__bridge CFURLRef)alertSound, &soundFileObject); 
NSLog(@"AudioServicesCreateSystemSoundID status = %ld", status); 

và kiểm tra những gì mã trạng thái bạn sẽ có được; parmErr (-50) là tương đối phổ biến và thường có nghĩa là URL của bạn là không.

Ồ, và một ý nghĩ khác, bạn không thể hiện nơi bạn đang thực sự phát âm thanh. Bạn biết rằng AudioServicesCreateSystemSoundID không thực sự phát âm thanh. Bạn cần gọi:

AudioServicesPlaySystemSound(soundFileObject); 

Xin lỗi nếu bạn đã biết điều đó!

+0

Yep, -50. NSURL của tôi trông giống như sau: NSURL * alertSound = [[NSBundle mainBundle] URLForResource: @ "tap" withExtension: @ "aif"]; Và tệp "tap.aif" nằm trong nhóm tôi đã tạo được gọi là Âm thanh. Có nơi nào đó cụ thể mà nó cần phải được đặt? Rất cám ơn sự giúp đỡ của bạn! – robspencer77

+0

Chỉ cần chắc chắn kiểm tra trong trình gỡ lỗi hoặc với một 'NSLog' rằng URL thực sự là không. Điều này có nghĩa là (như tôi nghĩ bạn đang bắt đầu nghi ngờ) rằng Xcode không sao chép âm thanh của bạn vào gói ứng dụng của bạn. Bạn có thể thử loại bỏ nó (chỉ tham chiếu !!!!) từ dự án của bạn và thêm lại nó và cũng kiểm tra lại rằng chính tả của tên tệp là chính xác (có thể là .aiff?). Tôi không nghĩ rằng bạn cần phải đặt nó ở bất cứ nơi nào đặc biệt. Tôi thường đặt những thứ như vậy trong nhóm "Hỗ trợ tập tin" mà Xcode tạo ra, nhưng tôi không nghĩ rằng đó là bắt buộc. – idz

+0

Ah, hiểu rồi! Cảm ơn! :) Không chắc chắn lý do tại sao điều đó chưa được thêm chính xác ngay từ đầu. Chúc mừng, idz! – robspencer77

Các vấn đề liên quan