I'm trying to incorporate sound effects into an Apple Watch application I've been working on (written in Objective-C), but I was disappointed by the fact that third party applications are not permitted to play sounds directly from the watch. As a workaround, I was looking to see if there was a way to play a specified sound through the paired device's speakers. I found one such thread here:
Play sound from Apple Watch speaker
however the link in the verified answer seems to be down at this time. In short, how can I play a sound effect triggered by the Apple Watch through its paired iPhone's speakers? Also, is it possible to make the device vibrate from the watch? Any help is greatly appreciated.
Unfortunately, AppleWatch doesn't allow developers to play or to record audio. You can play sound from iPhone speaker, as the simulator does. If you implement AVAudioPlayer on you WatchKit extension, you are going to listen in your Mac because the iPhone simulator is playing for you.
Taken from Apple Developer Forum:
Since the code simplegames showed is running on the iPhone simulator, not the watch simulator, and the button press on the watch simulator is causing the iPhone simulator code to activate the audio player, your mac is simulating sound from the iPhone.
No. It is not possible to play sounds with WatchKit on the Apple Watch.
I got the watch to play audio like this. It does however present the media player. Its not ideal but it works.
#import <Foundation/Foundation.h>
NSURL *yourURL = [myBundle URLForResource:#"yourAudioFile" withExtension:#"wav"];
NSDictionary *options = #{WKMediaPlayerControllerOptionsAutoplayKey : #YES};
[self presentMediaPlayerControllerWithURL:yourURL options:options completion:^(BOOL didPlayToEnd, NSTimeInterval endTime, NSError * __nullable error) {if (error)NSLog(#"Error: %#", [error description]);}];
Related
Can't find a clear answer on the internet.
I want to make an iOS App, which can play a sound on the Apple Watch, like you can play a sound on your iPhone from the Apple Watch (by swiping up from the watch face.)
Anyone knows if thats possible?
Cheers!
Matthijs
so I'm running on my iPad Mini and my code looks like
-(void)viewDidLoad{
[super viewDidLoad]
AudioServicesPlaySystemSound(1005);
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
}
and I imported
#import <AudioToolbox/AudioToolbox.h>
#import <AudioToolbox/AudioServices.h>
in my ViewController.h. Only the first sound plays, even though according to the documentation the second one should also beep. How can I fix this?
EDIT:
To people looking at this, in older devices this would beep I think - the documentation says:
"Depending on the particular iOS device, this function plays a short sound and may invoke vibration. Calling this function does the following on various iOS devices:
iPhone—plays the specified sound. If the user has configured the Settings application for vibration on ring, also invokes vibration. However, the device does not vibrate if your app’s audio session is configured with the AVAudioSessionCategoryPlayAndRecord or AVAudioSessionCategoryRecord audio session category. This ensures that vibration doesn’t interfere with audio recording. For an explanation of audio session categories, see Categories Express Audio Roles.
iPod touch, original—plays a short alert melody.
iPod touch, 2nd generation and newer—plays the specified sound."
but I think that functionality has been removed.
There is no vibration on iPad.
From documentation:
#constant kSystemSoundID_Vibrate
Use this constant with the play sound APIs to vibrate the device
- iOS only
- on a device with no vibration capability (like iPod Touch)
this will do nothing
So AudioServicesPlayAlertSound(kSystemSoundID_Vibrate); will do nothing on the iPad
iPads don't have a support physical vibration.
You can use these codes only in iPhones and newer versions of iPods.
As we get closer to the launch of the Apple Watch I am currently preparing an app for it. However what I want to do is be able to play a sound from the Apple Watch such as a song. Searching around I can see you need to play it through the iPhone but I can't figure out how to actually do it.
Any help will be greatly appreciated!
Objective-C is my preferred language however I can work with Swift.
Apple watch can play music , It is not currently possible to play sounds using the latest build of WatchKit.
I have two simulated apple devices. One is an iphone the other is simulated watch connected to the same phone.
Is there anyway to indicate or determine if a played sound is coming from the simulated iphone or the watch?
No. It is not possible to play sounds with WatchKit on the Apple Watch.
This is in Apple's Watchkit FAQ in their Developer Forums.
You could trigger a sound to play on the iPhone from a button press on the Watch but you can't play a sound directly from the Watch.
cant you just log an output when the sound is played to see which one its played from ?
You could try an audio hijack application to capture the audio of a particular app. "Audio Hijack" is one, there are many.
The accepted answer is no longer true. You can use WKInterfaceInlineMovie to play sound on the watch using a button tap on the watch, for example.
For a fuller explanation, see my response to this question:
Is there REALLY no way to play short sounds on Apple watch without a UI?
Is there a way to tell the iOS simulator which audio device connected to your computer you want it to use?
The simulator seems to pick whatever audio device is last connected to your machine. I've got a USB audio device (fasttrack pro) I use for my main sound playback and then a USB headset I use for my skype calls. More often than not, the simulator's audio is played on the headset instead of my main speakers.
Ok, I found that both the input and output device much match in system sound settings. Often I have them set to different devices. If they don't match, the simulator seems to default to the last connected audio device selected among the input and output devices.
On a related note: if you're like me and don't like interface sounds and therefore uncheck the preference "Play user interface sound effects" (Sound > Sound Effects), you'll need to check it to get sound out of the simulator.
I doubt the simulator has a setting for that, but you can set the main output device in System Preferences > Sound.
Don't know if this will fix your issue, but it fixed mine.
I wanted the iOS simulator to output sound through a device I had connected and not the internal speakers. When I select the System Prefs Sound and selected my device as output, it would not work.
So, I selected the Sound Effects tab from the Prefs - Sound window and selected my device under Play Sound effects Through and presto it worked.
Don't know the in-outs of iphone sound, but apparently mine were being treated as sound effects.
Hope that helps, if not, I gave it a shot.
Open iOS Simulator, under Hardware toolbar you can control Audio Input, Audio Output, and volume as well!
I think it was added at Xcode 9.2, and that it's available only when running simulator with iOS 11 and above
func vibratePhone() {
if (UIDevice.current.model == "iPhone") {
AudioServicesPlaySystemSound(1352)
} else {
AudioServicesPlayAlertSound(1105)
}
}
1352 Is the system sound ID for Vibration and 1105 is for Tock.caf if the user's device is an iPad or an iPod Tock.caf will be played in place of vibration.
Working on an audio project on my studio and still didn't got it working on MOTU Hardware with everything pointing to the interface! All system sounds route properly except the iOS Sim!
Did this workaround:
iOS Sim/OS X -> SoundFlower virtual I/O -> (Any audio program like Logic/Live) -> MOTU HW
This might give you the freedom to route your audio as you please ;)