Comments (9)
I think this is a Info.plist
issue. Through a bit of work, I was able to get Host num input devices: 1
on a device.
I had to add microphone
to the list of UIRequiredDeviceCapabilities
. I also added NSMicrophoneUsageDescription
but I think you may have this one as it's mentioned in permission_handler
. Once doing that, the "This app wants to use your microphone" modal popped up.
Note: The same Info.plist
doesn't change the result on my iOS simulator (Host num input devices: 0
) but I've got other things to work on.
Hope that helps.
from cpal.
@tGrothmannFluffy you may also need to configure and activate AVAudioSession. Set category to play and record
from cpal.
Oh goodness gracious!
Your comment pointed me to the right solution. It worked after I added :
import AVFAudio
...
#if os(iOS)
let audio_session = AVAudioSession.sharedInstance();
do {
try audio_session.setCategory(AVAudioSession.Category.playAndRecord);
try audio_session.setActive(true);
} catch {
print(error);
}
#endif
into AppDelegate.swift.
from cpal.
update:
When I get the audio devices in Dart using audio_service:
final session = await AudioSession.instance;
List<AudioDevice> audioDevices = (await session.getDevices()).toList();
for (var device in audioDevices) {
print("Device: ${device.name}, input: ${device.isInput}, type: ${device.type}");
}
the mic is found:
Device: MicrophoneBuiltIn, input: true, type: AudioDeviceType.builtInMic
Device: Speaker, input: false, type: AudioDeviceType.builtInSpeaker
from cpal.
Thanks for the investigation!
I added
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>microphone</string>
</array>
to ios/Runner/Info.plist
but unfortunately that didn't fix it.
It might be a permissions issue, but the microphone permission modal pops up and flutter has microphone permissions. Just the rust library it links maybe doesn't 🤔
from cpal.
I'm still investigating this issue and I have some news.
I've tested several versions on simulators and the problem starts with iOS 17.0
iphone 8 on iOS 15.0 - works
iphone 12 on iOS 16.0 - works
iphone 14 on iOS 16.4 - works
iphone 11 on iOS 17.0 - doesn't work
iphone 14 on iOS 17.0 - doesn't work
iphone 15 on iOS 17.2 - doesn't work
from cpal.
@tGrothmannFluffy I don't know your app, but if you want play nice with other apps that are currently in background, it is better to activate your audio session on demand and not in AppDelegate app start. Otherwise, for instance, Apple Music will stop playing when your app starts and may be that behavior your users would not like.
from cpal.
Thanks for the help!
Yes, that makes absolute sense. It's a Flutter app (Dart) using a Rust library for audio (via flutter_rust_bridge). It would be best to set the session to active in Rust. Unfortunately I don't know how to activate the session outside of Swift code at the moment.
from cpal.
Ok, turns out using audio_session in Dart/Flutter works:
final session = await AudioSession.instance;
await session.configure(const AudioSessionConfiguration.music().copyWith(
avAudioSessionCategory: AVAudioSessionCategory.playAndRecord,
));
await session.setActive(true);
But I wonder, isn't this something cpal should do when opening a stream?
from cpal.
Related Issues (20)
- Mismatched types cross compiling asio-sys with x86_64-pc-windows-gnu HOT 3
- cpal::SampleFormat docs
- iOS randomly chooses speaker and earpiece HOT 3
- `cpal::SampleFormat` does not implement `Hash` or `Ord`
- Sample Length is Constant and at A Non-power of Two
- Slow enumeration of output devices on Windows HOT 1
- In Wasm, Only Output Can be Used ? HOT 2
- On mac, the voice obtained with `input` contains system audio , not just microphone sound. HOT 2
- Entire system sound mutes while debugging
- [linux] [chromeOS] Recording with BufferSize < 1024 leads to bad audio
- debug_assertions not supported for selecting dependencies and will not work as expected HOT 1
- Record system audio on multiple platforms
- Suppport ScreenCaptureKit loopback HOT 5
- ```cpal::default_host().default_input_device()``` doesn't work in WASM environment
- [QUESTION] Cpal + wasm + WebAudioAPI setup
- [Question/Feature] Get channel names of a device for certain platforms
- `NoDevice` error on web
- Audio sampling data problem HOT 2
- ASIO4ALL.org looks... unsafe. HOT 3
- Using Asio4All results in StreamConfigNotSupported
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cpal.