| 217 | } |
| 218 | |
| 219 | std::vector<int64_t> sparse_mel_starts(const AudioTensor & filterbank) { |
| 220 | const int64_t n_mels = filterbank.shape[0]; |
| 221 | const int64_t freq_bins = filterbank.shape[1]; |
| 222 | std::vector<int64_t> starts(static_cast<size_t>(n_mels), 0); |
| 223 | for (int64_t mel = 0; mel < n_mels; ++mel) { |
| 224 | int64_t start = 0; |
| 225 | while (start < freq_bins && filterbank.values[static_cast<size_t>(mel * freq_bins + start)] == 0.0f) { |
| 226 | ++start; |
| 227 | } |
| 228 | starts[static_cast<size_t>(mel)] = start; |
| 229 | } |
| 230 | return starts; |
| 231 | } |
| 232 | |
| 233 | std::vector<int64_t> sparse_mel_ends(const AudioTensor & filterbank) { |
| 234 | const int64_t n_mels = filterbank.shape[0]; |