Frequently Asked Questions/Support
If you have trouble with some aspect of using OpenEars and you have carefully re-read the documents and examined the example app without it helping, you can ask a question in the OpenEars forum (please turn on OpenEarsLogging and — if the issue relates to recognition — PocketsphinxController’s verbosePocketsphinx property before posting an issue so I have some information to troubleshoot from). The forum is a place to ask questions free of charge, but free private email support is not given for OpenEars. However, you can purchase a support incident if you would like to discuss a question via private email.
Table of Contents
- Frequently Asked Questions/Support
- Q: I followed the tutorial and I’m sure that I did every step, but I’m getting an error similar to ”Slt/Slt.h’ file not found’.
- Q: I just tried the tutorial and PocketsphinxController didn’t understand the words that I said.
- Q: But I want to write an app that uses different words from the ones in the sample app.
- Q: I’m trying to use a sound framework like Finch or another OpenAL wrapper and things aren’t working as expected.
- Q: When I license an OpenEars plugin (not OpenEars, one of its plugins), the license is for one app. Does that mean I need a license for each app user?
- Q: My app crashes when listening starts
- Q: There is a bug on the Simulator/recognition isn’t good on the Simulator
- Q: I’m getting a linker error with RapidEars, NeatSpeech, Rejecto, SaveThatWave, or another plugin — what should I do?
- Q: I have tried a fix for a known issue which others have been able to solve definitively, but it doesn’t work for me.
- Q: What license does OpenEars use?
- Q: So I can use this in commercial, closed-source apps?
- Q: Can I or should I reference OpenEars in my support/marketing/etc materials?
- Q: How can I trim down the size of the final binary for distribution?
- Q: I thought that this version of OpenEars supported the -all_load linker flag, but I’m getting a duplicate symbol error when I use OpenEars with the flag enabled.
- Q: Have any apps ever been rejected for using OpenEars?
- Q: I still have a question, how do I get more support?
- Q: Can I hire you to create an OpenEars-enabled app for me or adapt OpenEars?
- Q: Did you change the title of my post/remove my post/move my post/otherwise moderate something on the forums?
Q: I followed the tutorial and I’m sure that I did every step, but I’m getting an error similar to ”Slt/Slt.h’ file not found’.
A: If you are using Xcode 5 with a build number of 5A1413 or later, it has a bug which results in frameworks linked by reference being changed to link at incorrect URL paths, so when you add the frameworks it is necessary for you to also check the box that says “Copy items into destination group’s folder (if needed)”, or you may receive errors that header files can’t be found in frameworks which were already added. If the issues persist, take a look at what is found in your Framework Search Paths build setting for the app, since it is this entry that is being changed into a non-working URL when frameworks are added. I hope this bug is fixed soon.
Q: I just tried the tutorial and PocketsphinxController didn’t understand the words that I said.
A: 95% of the time, this is either because you were saying words which aren’t in the vocabulary that PocketsphinxController is listening for, meaning that it doesn’t have a way of recognizing those words, or you are testing recognition on the Simulator. Take a look at which words the app is listening for and test recognition of those words, and make sure to test on a real device.
Q: But I want to write an app that uses different words from the ones in the sample app.
A: LanguageModelGenerator is the class in OpenEars which lets you define which words to listen for. OpenEars works by creating a specific vocabulary to listen for. The tutorial explains how to create your own vocabulary.
Q: I’m trying to use a sound framework like Finch or another OpenAL wrapper and things aren’t working as expected.
A: PocketsphinxController has very specific audio session and audio unit requirements and it can’t be run simultaneously with another framework which requires control over the audio session and audio input. If you want to run such a framework alongside FliteController and you don’t need PocketsphinxController, you can set FliteController’s noAudioSessionOverrides property to TRUE so it doesn’t interact with the audio session.
Q: When I license an OpenEars plugin (not OpenEars, one of its plugins), the license is for one app. Does that mean I need a license for each app user?
A: No, the license is for the app itself, so you need one license for one listing in the App Store. No matter how many users your app gets, it’s just one license needed, and we hope you get a whole lot.
Q: My app crashes when listening starts
A: This is pretty much always because the acoustic model wasn’t successfully added to your app. If you turn on OpenEarsLogging and verbosePocketSphinx you can verify it by searching for an error with “acmod” in it. To fix it, follow these instructions from the tutorial: “Inside your downloaded OpenEars distribution there is a folder called “Frameworks”. Drag that folder into your app project in Xcode. Make absolutely sure that in the add dialog “Create groups for any added folders” is selected and NOT “Create folder references for any added folders” because the wrong setting here will prevent your app from working.” A missing acoustic model has been the cause of every crash report I’ve received in the last year with only two exceptions, so even if you’re pretty sure that you added the acoustic model, double-check that the files found in the Framework folder are all present in your app.
Q: There is a bug on the Simulator/recognition isn’t good on the Simulator
A: OpenEars has a new low-latency audio driver written in Audio Units which requires an Audio Session setting in order to work which isn’t supported by the Simulator. Because I know that it can be slow to debug app logic without using the Simulator, I have provided a second audio driver that is compatible with the Simulator. However, it isn’t as good as the device driver and I have spent very little time trying to debug it since I am only providing it as a nicety. With that understanding, please don’t evaluate OpenEars’ accuracy or behavior based on the Simulator, since it uses a completely different audio driver, and please don’t report Simulator-only bugs since I don’t actively support the Simulator or its driver.
A: It is necessary to set the linker flag -ObjC for your target when using the plugins. If this isn’t the issue, it is otherwise always due to the fact that the plugin requires a certain version of OpenEars or later, and you are using an earlier version, or an earlier version is still somehow linked to your project. The minimum required OpenEars version is always mentioned in the plugin docs, or you can always just use the latest version found on the main OpenEars page. In the case of NeatSpeech, it is also necessary to give extra attention to this step from the instructions: “For the last step, change the name of the implementation source file in which you are going to call NeatSpeech methods from .m to .mm (for instance, if the implementation is named ViewController.m, change its name to ViewController.mm and verify in the Finder that the name of the file has changed) and then make sure that in your target Build Settings, under the section “C++ Standard Library”, the setting “libstdc++ (Gnu C++ standard library)” is selected. If you receive errors like “Undefined symbols for architecture i386: std::basic_ios >::widen(char) const”, that means that this step needs special attention.”
Q: I have tried a fix for a known issue which others have been able to solve definitively, but it doesn’t work for me.
A: Many, many developers have reported situations like this that were fixed with complete re-installs of OpenEars. That suggests that not every change is always being picked up for them during new compilations for whatever reason (maybe you have different build settings in your preferences, not sure). If your system is manifesting the same symptoms of not picking up a change that others have reported as helpful to a specific issue, it shouldn’t be necessary to completely re-install OpenEars in order to experience the same benefits — just remove the app from your device and/or simulator, and then open the library and your app respectively in Xcode and select Product->Clean or type Shift-Command-k. Then you should be able to do a fresh compile and install. The initial compile will take some time, so go have a cup of tea or make a sandwich. Another issue that has similar symptoms is if you have Xcode set to automatically save when building, and you make a change to a .h file that is a search header of a project but not actually in the file navigator of the project — in order to see such changes reflected in your build, it is necessary to manually save your changes first because a linked search header doesn’t fall under the category of things Xcode will automatically save for you before doing a build.
Q: What license does OpenEars use?
A: There are actually five libraries used by OpenEars-enabled projects, only one of which is the OpenEars framework, and you can see the license (which is very liberal) for CMU Pocketsphinx, CMU Sphinxbase, CMU Flite and CMUCLMTK here. You need to observe the terms of those licenses in your app as well as the OpenEars one, which shouldn’t be difficult since they are commercial-friendly licenses.
OpenEars is licensed under the Politepix Public License version 1.0. It gives you the right to use OpenEars to make apps. You have some obligations (such as crediting the libraries involved) so please read the license.[TOP]
Q: So I can use this in commercial, closed-source apps?
Q: Can I or should I reference OpenEars in my support/marketing/etc materials?
A: I’d love it if you want to talk about OpenEars in your marketing! If you want to discuss it in your support documents, just please do so in a way that it doesn’t cause any confusion for your endusers about where to seek support (i.e. it must be clear that you are responsible for supporting your app) and it doesn’t imply an endorsement of your app by Politepix or any of the maintainers of the libraries that OpenEars links to.
Q: How can I trim down the size of the final binary for distribution?
A: There are instructions on doing this here.[TOP]
A: This version of OpenEars has been tested with the -all_load linker flag and it works, however, a side-effect of using this flag is that every possible class will be checked for duplicate symbols whether they are used anywhere or not. If you are getting duplicate symbol warnings with OpenEars and the -all_load linker flag, that means that another library or class that you link to (unrelated to OpenEars) uses the same method or function names as something in OpenEars or elsewhere in your app. The only thing to do here is to find the duplicated method or function name and change it in one case (and make sure that every single place it is called is also changed to reflect the new name). Although I’m willing to support the ability to compile OpenEars itself with the -all_load linker flag, I can’t support any/all issues which can come up as a result of choosing to use -all_load, and namespace issues are better supported by libraries that require that flag. At this point, it is no longer a necessity that any framework require that you use the -all_load flag, so you might want to let them know that it’s time to drop -all_load.
Q: Have any apps ever been rejected for using OpenEars?
A: I have never heard of any apps being rejected for using OpenEars, and I wouldn’t expect them to be since I’ve taken care to make sure OpenEars doesn’t do anything questionable, and where I’ve had any questions I’ve just written Apple and asked them for guidance directly. I have heard of many apps that were accepted that used OpenEars so it is fine to use OpenEars. I hope that if anyone ever has an issue getting an OpenEars-enabled app accepted because of something to do with OpenEars specifically, they will fill me in.
Q: I still have a question, how do I get more support?
A: You can always ask for help in the forums and I’ll do my best to answer your question. Please turn on OpenEarsLogging and (if the issue relates to recognition) PocketsphinxController’s verbosePocketsphinx property before posting an issue so I have some information to troubleshoot from. Free private email support is not given for OpenEars, but you can purchase a support incident if you would like to discuss a question via private email. Forum support is free. Other emails regarding OpenEars (i.e. not support requests) can be sent via the contact form.
Q: Can I hire you to create an OpenEars-enabled app for me or adapt OpenEars?
A: Sorry, this is no longer offered.
Q: Did you change the title of my post/remove my post/move my post/otherwise moderate something on the forums?
A: I may have — I want the forums to stay as small and focused as possible so that the answers are right there near the front page of posts and there isn’t confusing, contradictory, outdated, overly-speculative or off-topic info in there (where on-topic == “about implementing OpenEars”), so I take out the scissors from time to time if I read something that I think is kind of a clanger or mis-titled, mis-tagged, etc. It means that it isn’t a great place for free-form conversation but it’s a good place to get a reliable answer about OpenEars implementation. I don’t think this is unusual for a troubleshooting forum, but I wanted to make it explicit since I like to know what the moderation policies are for forums that I visit.
Try RapidEarsNeed faster recognition? RapidEars is a paid plugin for OpenEars which does live recognition in real time as speech enters the microphone -- no more waiting for a pause at the end of the sentence to see what the user is saying. It's great for games or any application where you can't have latency. Try RapidEars free of charge. Try doing that over the network!
Try NeatSpeechNeed better voices? NeatSpeech is a paid plugin for OpenEars which gives it the ability to use fast, higher-quality voices which have little to no lag even when speaking extremely long statements. Try NeatSpeech free of charge.
How to get help with OpenEarsThere is free public support for OpenEars in the OpenEars Forums, and now you can also purchase integrations of OpenEars into your existing apps, and private email support incidents at the Politepix Shop.