Я записываю звук на iPhone, используя AVAudioRecorder
со следующими настройками:
NSMutableDictionary *recordSettings = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
[NSNumber numberWithFloat:44100.0], AVSampleRateKey,
[NSNumber numberWithInt:1], AVNumberOfChannelsKey,
[NSNumber numberWithInt:12800], AVEncoderBitRateKey,
[NSNumber numberWithInt:16], AVLinearPCMBitDepthKey,
[NSNumber numberWithInt: AVAudioQualityHigh], AVEncoderAudioQualityKey,
nil];
(я могу быть гибким на большинстве этих настроек, но я должен использовать MPEG4 AAC.)
Я сохраняю звук в файл.
Пользователь должен иметь возможность вернуться позже и продолжить запись в тот же файл. Нет Кажется, это вариант сделать это напрямую с помощью AVAudioRecorder
, поэтому вместо этого я записываю в новый файл и объединяю их.
В настоящий момент я добавляю файлы, используя AVMutableComposition
и AVMutableCompositionTrack
как здесь , но он очень медленный для более длинных записей, поэтому это практически невозможно.
Я думаю, что было бы намного быстрее, если бы Я мог бы вырезать заголовок из второго файла, добавить аудиоданные в первый файл, а затем изменить заголовок объединенного файла, чтобы отразить новую продолжительность. Поскольку я знаю, что оба файла были созданы с одинаковыми настройками, я полагаю, что остальные детали в заголовках должны быть идентичными.
К сожалению, я не могу найти никакой информации о том, в каком формате находятся заголовки, и есть ли это ' m писать приложение для Windows Phone 7, которое использует push-уведомления и имеет класс, отвечающий за управление взаимодействиями между серверами уведомлений MS и моей службой в облаке. Однако, когда я пытаюсь открыть канал на моем устройстве, HttpNotificationChannel выдает исключение InvalidOperationException с сообщением «Не удалось открыть канал». Согласно MSDN я должен попытаться открыть канал еще раз.
Мой фрагмент кода для открытия push-уведомления следует стандартному шаблону:
public class HttpNotification {
private const string kChannelName = "MyApp.PushNotification";
private HttpNotificationChannel _Channel;
public void Register() {
try {
_Channel = HttpNotificationChannel.Find(kChannelName);
if (_Channel == null) {
_Channel = new HttpNotificationChannel(kChannelName);
InstallEventHandlers();
// This line throws
_Channel.Open();
} else {
InstallEventHandlers();
};
} catch (InvalidOperationException ex) {
MessageBox.Show(string.Format("Failed to initialise Push Notifications - {0}", ex.Message));
};
}
}
Я не совсем понимаю, что MSDN имеет в виду, говоря «попробуйте снова открыть канал». Я заключил вызов Open () в try / catch и отложил 5 секунд между попытками, но это не удалось. Я также пробовал тот же подход ко всему методу (т.е. Выполнять ли вызов HttpNotificationChannel.Find () каждый раз, когда он бросает) безрезультатно.
Я знаю, что это немного расплывчато, но мне было интересно, есть ли у кого-нибудь предложения по решению этой проблемы? Этот же код безупречно работает в эмуляторе, но каждый раз дает сбой на моем реальном устройстве, даже после деинсталляции и повторной установки моего приложения. Учитывая, что это мой настоящий телефон, я немного не хочу делать аппаратный сброс в надежде, что это решит эту проблему, и мне неудобно выпускать приложение на рынок, поскольку эта проблема меня преследует.
Обновить : Дополнительный момент, я использую неаутентифицированный канал, поэтому для моей облачной службы не установлен сертификат.
Обновление №2: Кроме того, я только что попытался развернуть рецепт Microsoft Phone Push Recipe на свое устройство, и он также бросает то же исключение.