Я создал эту функцию, которая позволяет вводить строку и возвращает список строк, обрезанных любым символом
func Trim(input:String, character:Character)-> [String]
{
var collection:[String] = [String]()
var index = 0
var copy = input
let iterable = input
var trim = input.startIndex.advancedBy(index)
for i in iterable.characters
{
if (i == character)
{
trim = input.startIndex.advancedBy(index)
// apennding to the list
collection.append(copy.substringToIndex(trim))
//cut the input
index += 1
trim = input.startIndex.advancedBy(index)
copy = copy.substringFromIndex(trim)
index = 0
}
else
{
index += 1
}
}
collection.append(copy)
return collection
}
, так как не нашел способа сделать это в swift (компилируется и отлично работает в Swift 2.0)
При измерении уровня звукового сигнала следует рассчитать дБ на основе среднеквадратичного значения. В вашем примере вы смотрите на абсолютный пиковый уровень. Одно (пиковое) значение выборки определяет значение в дБ, даже когда все остальные выборки равны 0.
попробуйте это:
double sum = 0;
for (var i = 0; i < _buffer.length; i = i + 2)
{
double sample = BitConverter.ToInt16(_buffer, i) / 32768.0;
sum += (sample * sample);
}
double rms = Math.Sqrt(sum / (_buffer.length / 2));
var decibel = 20 * Math.Log10(rms);
Для «мгновенных» уровней в дБ вы обычно рассчитываете среднеквадратическое значение в сегменте 20–50 мс. Обратите внимание, что рассчитанное значение дБ относительно полной шкалы. Для звука значение дБ должно быть связано с 20 uPa, и вам нужно будет откалибровать ваш сигнал, чтобы найти правильное преобразование из цифровых значений в значения давления.