Beispiel #1
0
int main(void) {
    int fd = open_device();
    init_device(fd);
    read_frames(fd);
    close_device(fd);
    atomic_puts("EXIT-SUCCESS");
    return 0;
}
Beispiel #2
0
status_t
read_cdda_data(int fd, off_t endFrame, off_t offset, void *data, size_t length,
	off_t bufferOffset, void *buffer, size_t bufferSize)
{
	if (bufferOffset >= 0 && bufferOffset <= offset + length
		&& bufferOffset + bufferSize > offset) {
		if (offset >= bufferOffset) {
			// buffer reaches into the beginning of the request
			off_t dataOffset = offset - bufferOffset;
			size_t bytes = min_c(bufferSize - dataOffset, length);
			if (user_memcpy(data, (uint8 *)buffer + dataOffset, bytes) < B_OK)
				return B_BAD_ADDRESS;

			data = (void *)((uint8 *)data + bytes);
			length -= bytes;
			offset += bytes;
		} else if (offset < bufferOffset
			&& offset + length < bufferOffset + bufferSize) {
			// buffer overlaps at the end of the request
			off_t dataOffset = bufferOffset - offset;
			size_t bytes = length - dataOffset;
			if (user_memcpy((uint8 *)data + dataOffset, buffer, bytes) < B_OK)
				return B_BAD_ADDRESS;

			length -= bytes;
		}
		// we don't handle the case where we would need to split the request
	}

	while (length > 0) {
		off_t frame = offset / kFrameSize;
		uint32 count = bufferSize / kFrameSize;
		if (frame + count > endFrame)
			count = endFrame - frame;

		status_t status = read_frames(fd, frame, (uint8 *)buffer, count);
		if (status < B_OK)
			return status;

		off_t dataOffset = offset % kFrameSize;
		size_t bytes = bufferSize - dataOffset;
		if (bytes > length)
			bytes = length;

		if (user_memcpy(data, (uint8 *)buffer + dataOffset, bytes) < B_OK)
			return B_BAD_ADDRESS;

		data = (void *)((uint8 *)data + bytes);
		length -= bytes;
		offset += bytes;
	}

	return B_OK;
}
Beispiel #3
0
int main(void)
{
    void *frames;
    size_t size;

    size = read_frames(&frames);
    if (size == 0) {
        return EXIT_FAILURE;
    }

    if (write_file(frames, size) < 0) {
        free(frames);
        return EXIT_FAILURE;
    }

    free(frames);

    return EXIT_SUCCESS;
}
void Processor::process(){
    std::cout << "Processing file." << std::endl;
    SDL_Renderer* renderer = yield_renderer();
    size_t frame_idx = 0;
    sf_count_t readCount = 0;

    int i = 0;
    
    float centroid = 0;
    float flow = 0;

    float to_wait = FFT_SIZE / float(m_sampleRate);
    bool must_break = false;
    float* previous_magnitudes = new float[FFT_SIZE];
    for (int j = 0; j < FFT_SIZE; ++j) {
        previous_magnitudes[j] = 0;
    }
    while((readCount = read_frames(frame_idx)) > 0){
        to_mono(fft_in, readCount);
        frame_idx+=readCount;
        fftw_execute(trans);
        ProcessingTools::plotData(renderer, fft_in, FFT_SIZE);
        SDL_Delay(500);
        if( i < NUMBER_OF_WINDOWS ){
            fftw_execute(trans);
            for(int j=0; j < m_bufsize/m_channelCount; j++){
                if( DEBUG_ENABLED ){
                    std::cout << fft_in[j][0];
                }
            }
            float* magnitudes = new float[FFT_SIZE];
            float* lolz = ProcessingTools::get_magnitude(magnitudes, fft_out, FFT_SIZE);
            float result_centroids = ProcessingTools::compute_centroid(magnitudes, FFT_SIZE);
            centroid += result_centroids;

            float result_flow = ProcessingTools::compute_flow(magnitudes, previous_magnitudes, FFT_SIZE);
            flow += result_flow;
            if(DEBUG_ENABLED){
                std::cout << "Centroid: ";
                std::cout << result_centroids << std::endl;

                std::cout << "Flow: ";
                std::cout << result_flow << std::endl;
            }
            for( int j = 0; j < FFT_SIZE; ++j){
                previous_magnitudes[j] = magnitudes[j];
            }
            i++;
        }else{
            break;
        }
    }
 

    std::cout << "Centroid: ";
    std::cout << (centroid/NUMBER_OF_WINDOWS) << std::endl;

    std::cout << "Flow: ";
    std::cout << (flow/NUMBER_OF_WINDOWS) << std::endl;

    std::cout << "Processing file done." << std::endl;
    SDL_DestroyRenderer(renderer);
    SDL_Quit();
}